Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何解决编码问题?_Python_Excel_Csv_Encoding - Fatal编程技术网

Python 如何解决编码问题?

Python 如何解决编码问题?,python,excel,csv,encoding,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\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>
文件“C:\Python36\lib\encodings\cp1252.py”,第23行,在解码返回编解码器.charmap\u解码(输入,自.错误,解码表)[0]
UnicodeDecodeError:“charmap”编解码器无法解码位置1137:字符映射到的字节0x81
我的理解是,这个文件不是在cp-1252中编码的,我需要找出使用了什么编码。我尝试了很多东西,但现在都不管用

关于文件:

  • 这是一家外部公司寄来的,我没有更多的信息了
  • 它还附带了其他类似的文件,当我运行相同的代码时,这些文件没有任何问题
  • 它有一个.xls扩展名,但更像是一个用分号分隔的csv文件
  • 当我用Excel打开它时,它会以兼容模式打开。但我没有看到任何类型的编码问题:所有内容都显示正确
我已经尝试过的:

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

    使用(打开(self.path,'r',encoding='utf8')作为csv_文件:

  • 复制将文件内容粘贴到新文件中,或删除文件的全部内容。还是不行。这个问题真的让我很烦,因为我觉得这意味着问题不在文件的内容中,也不在文件本身中

  • 到处都在寻找如何解决这种问题

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

/!\根据您的需要更改
数据路径
\

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

我终于找到了某种解决办法:

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

    您可以尝试使用
    pandas
    openpyxl
    读取该文件。Python 2或Python 3?(可能相关)。如果它在Excel中打开,请尝试从Excel保存到另一个CSV文件。这可能会解决编码问题,而不必查明到底是什么地方出了问题。或者它可能不是……Python 3。事实上,我在看到你的评论之前就尝试过这个方法,而且效果很好(正如我在另一个回答中所解释的)。无论如何谢谢你!尝试检测编码?它无法解决问题。我得到了错误消息:`File“pandas\parser.pyx”,第535行,在pandas.parser.TextReader中。`uu-cinit\uuu(pandas\parser.c:6086)文件“pandas\parser.pyx”,第740行,在pandas.parser.TextReader中。`u-get\u头(pandas\parser.c:9266)unicodec无法解码位置0处的字节0xd0:无效的延续字节`No我不。。。我一直试图找出答案,但没有成功,请用记事本打开您的文件。然后,转到
    另存为
    ;将有一个选项用于选择您的编码。所选的是您的文件编码时使用的编码。可能尝试创建一个新的excel文件,在“数据”选项卡中>“获取外部数据>从其他源>从XML数据导入>(选择所有文件类型)选择您的文件。等待导入结束并另存为excel文件。