如何解决编码问题?

时间:2017-02-08 10:04:47

标签: python excel csv encoding

我需要使用Python读取csv文件的内容。但是,当我运行此代码时:

with(open(self.path, 'r')) as csv_file:
    csv_reader = csv.reader(csv_file, dialect=csv.excel, delimiter=';')
    self.data = [[cell for cell in row] for row in csv_reader]

我收到此错误:

File "C:\Python36\lib\encodings\cp1252.py", line 23, in decode return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 1137: character maps to <undefined>

我的理解是这个文件没有用cp-1252编码,我需要找出使用的编码。我尝试了很多东西,但现在没有任何作用。

关于文件:

  • 由外部公司发送,我无法获得更多相关信息。
  • 它附带了其他类似的文件,当我运行相同的代码时,我没有任何问题
  • 它有.xls扩展名,但更像是用分号分隔的csv文件
  • 当我用Excel打开它时,它会在兼容模式下打开。但我没有看到任何类型的编码问题:一切都显示正确。

我已尝试过的内容:

  • 以不同的文件格式保存以摆脱兼容模式
  • 在我的代码的第一行添加编码:(我或多或少地随机尝试了一些我知道的编码)

    with(open(self.path,&#39; r&#39;,encoding =&#39; utf8&#39;))as csv_file:

  • 将文件内容复制粘贴到新文件中,或删除文件的全部内容。仍然无法正常工作。这个真的很烦我,因为我觉得这意味着问题不在文件的内容中,而不在文件本身中。

  • 到处搜索如何解决这类问题。

2 个答案:

答案 0 :(得分:0)

我建议使用pandas库(以及numpy),它在数据操作方面非常方便。此函数从xlsx或csv文件类型导入数据。

/!\根据您的需要更改datapath /!\

import os
import pandas as pd

def GetData(directory, dataUse, format):
    dataPath = os.getcwd() + "\\Data\\" + directory + "\\" + dataUse + "Set." + format
    if format == "xlsx":
        dataSet = pd.read_excel(dataPath, sheetname = 'Sheet1')
    elif format == "csv":
        dataSet = pd.read_csv(dataPath)
    return dataSet

答案 1 :(得分:0)

我终于找到了某种解决方案:

  1. 使用Excel打开文件
  2. 使用“文本到列”功能正确显示文件
  3. 将文件保存为csv格式
  4. 运行代码
  5. 这不太令我满意,但它确实有效。 我仍然不明白问题究竟是什么,为什么这解决了,所以我对任何其他信息感兴趣!