我有一个csv文件,它似乎是根据文件开头存在的BOM表以UTF-8编码的。但是,当我尝试打开它时,出现错误
import io
import chardet
from zipfile import ZipFile
from pandas import read_csv
filename = './sample.zip'
objs = []
frames = []
with ZipFile(filename) as zf:
zipinfo_objs = [ zi for zi in zf.infolist()
if zi.filename.endswith(".csv") ]
for zipinfo_obj in zipinfo_objs:
obj = zf.read(zipinfo_obj.filename)
objs.append(obj)
print("Bytes Objects:", [type(obj) for obj in objs])
print("Encoding:", chardet.detect(objs[0]))
print("BOM:", objs[0][:4])
buffer = io.BytesIO(objs[0])
frame = read_csv(buffer)
frames.append(frame)
收益
Bytes Objects: [<class 'bytes'>]
Encoding: {'encoding': 'UTF-8-SIG', 'confidence': 1.0, 'language': ''}
BOM: b'\xef\xbb\xbf"'
...
...
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf3 in position 12: invalid continuation byte
但是,如果我尝试对缓冲区进行解码时将编码指定为latin-1,例如:
frame = read_csv(buffer, encoding="latin-1")
。
我获得了成功,熊猫能够在数据框中读取数据。
此文件是从Adobe Analytics生成的,显然,除了为用户提供选择CSV或Tableau文件的选项之外,没有其他选项可以指定导出的格式。
我的问题是: