【发布时间】:2020-02-20 01:44:55
【问题描述】:
大多数关于在 Python 中从磁盘读取字符串的问题都涉及编解码器问题。相比之下,我有一个 CSV 文件,其中包含垃圾数据。以下是创建示例的方法:
b = bytearray(b'a,b,c\n1,2,qwe\n10,-20,asdf')
b[10] = 0xff
b[11] = 0xff
with open('foo.csv', 'wb') as fid:
fid.write(b)
注意第二行第三列有两个字节0xFF,不代表任何编码,只是少量的垃圾数据。
当我尝试使用pandas.read_csv 阅读本文时:
import pandas as pd
df = pd.read_csv('foo.csv') # fails
我自然会出错:
File "pandas/_libs/parsers.pyx", line 881, in pandas._libs.parsers.TextReader.read
...
File "pandas/_libs/parsers.pyx", line 1520, in pandas._libs.parsers._string_box_utf8
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
如果我使用 Pandas 的 Python CSV 引擎,我可以成功读取此文件:
df2 = pd.read_csv('foo.csv', engine='python') # success
在这种情况下,无效字符被替换为U+EFBF Unicode 用来表示“无效字符”的字符。
问题:有没有办法让 Pandas 的 C CSV 引擎做与 Python 一样的事情?
【问题讨论】: