读取python中的文件,该文件包含导致utf-8和ascii出错的恶意字节0xc0

读取python中的文件,该文件包含导致utf-8和ascii出错的恶意字节0xc0,python,python-3.x,pandas,csv,iso,Python,Python 3.x,Pandas,Csv,Iso,正在尝试将选项卡分隔的文件读入数据帧: >>> df = pd.read_table(fn , na_filter=False, error_bad_lines=False) 它的错误是这样的: b'Skipping line 58: expected 11 fields, saw 12\n' Traceback (most recent call last): ...(many lines)... UnicodeDecodeError: 'utf-8' codec can'

正在尝试将选项卡分隔的文件读入数据帧:

>>> df = pd.read_table(fn , na_filter=False, error_bad_lines=False)
它的错误是这样的:

b'Skipping line 58: expected 11 fields, saw 12\n'
Traceback (most recent call last):
...(many lines)...
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc0 in position 115: invalid start byte
似乎字节0xc0在utf-8和ascii编码中都会引起疼痛

>>> df = pd.read_table(fn , na_filter=False, error_bad_lines=False, encoding='ascii')
...(many lines)...
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc0 in position 115: ordinal not in range(128)
我在csv模块的阅读器上也遇到了同样的问题。
如果我将文件导入到OpenOffice Calc中,它会正确导入,列会正确识别,等等。可能会忽略有问题的0xc0字节。这并不是一些重要的数据块等等,它可能只是生成此文件的系统的一个侥幸写入错误。如果涉及到这一点,我甚至会很高兴地把他出现的地方删掉。我只想把这个文件读入python程序。pandas的
error\u bad\u lines=False
选项应该已经解决了这个问题,但是没有骰子。此外,该文件没有任何非英语脚本的内容,这使得unicode非常必要。都是标准的英文字母和数字。我也试过utf-16、utf-32等,但它们只会导致更多的错误

如何让python(特别是熊猫数据帧)读取一个包含一个或多个恶意字节0xc0字符的文件?

将此答案移到这里,它受到了恶意的接收

实际接受字节0xc0(意思是不出错):

encoding="ISO-8859-1"  
注意:这需要确保文件的其余部分没有unicode字符。这可能对像我这样的人有帮助,他们的文件中没有任何unicode字符,只想让python加载这个该死的东西,utf-8和ascii编码都出错了

有关ISO-8859-1的更多信息:

有效的新命令:

>>> df = pd.read_table(fn , na_filter=False, error_bad_lines=False, encoding='ISO-8859-1')

读入数据帧后,数据帧很好,列和数据都像OpenOffice Calc中的一样工作。我仍然不知道有问题的
0xc0
字节去了哪里,但这并不重要,因为我已经获得了所需的数据。

ISO-8859-1适用于这个特定字节,但未定义0x80-0x9f范围。Windows代码页1252是一种流行的(但也遭到了批评)编码,它可以处理任何8位字节。我不会称之为“恶意”。也许有点负面。@tripleee谢谢你的提示。。您是否可以通过指定
encoding=
参数中要提供的内容来提供完整性?我猜它不会是
encoding='Windows code page 1252'
Python使用
encoding='cp1252'
,尽管代码中有一些别名(例如,我认为
'Windows-1252'
也可以工作)。可能将文件作为二进制文件读取,然后使用UTF-8和不太严格的编解码器对其进行解码。
decode
方法接受一个可选参数,您可以说用U+FFFD替换无效序列,或者干脆丢弃它们。