我需要处理大量CSV文件,
这些文件来自中国,所以我猜编码是非utf8
然而,文件甚至无法在Python 3中读取。
如何阅读这些文件并使用Python 3写入新文件。
这是片段
with open('20120901_20120915_ACCLOG.csv', 'r') as f:
sources = f.readlines()
print(sources)
我收到错误UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb8 in position 3: invalid start byte
以下是XLS文件和示例pyhton脚本
答案 0 :(得分:3)
打开文件时需要指定正确的编解码器。什么是正确的编解码器 我们只能猜测;你使用其中一个Chinese GB* codecs时,你上传的GitHub样本解码很好,但是那些编解码器非常渴望(未编码其中一个的文本也可以被解码,只是结果错误)。
如果已知编解码器,您需要询问这些CSV文件的来源。这可以在文档中,或在HTTP Content-Type
标题中(查找charset=
参数),或者通过其他元数据方式。
要在打开文件时指定编解码器,请使用encoding
参数:
with open('20120901_20120915_ACCLOG.csv', 'r', encoding='gbk') as f:
请参阅Standard Encodings表,了解Python 3可以开箱即用的编解码器;从那里可以选择各种中文编解码器。
答案 1 :(得分:2)
该文件似乎编码为GB2312。像encoding
这样指定open()
选项:
with open('20120901_20120915_ACCLOG.csv', encoding='GB2312') as f:
sources = f.read()
print(sources)
我使用chardet
模块确定了编码:
>>> chardet.detect(open('20120901_20120915_ACCLOG.csv','rb').read())
{'encoding': 'GB2312', 'confidence': 0.99}
值得注意的是,有几个编解码器(编码)适用于此文件: gb2312,gbk和gb18030都产生相同的结果。 big5hkscs也可以工作,但会产生与其他三个编解码器不同的结果。我不确定哪一个是正确的,或者是否其中任何一个是正确的。
BTW,该文件似乎不是普通的CSV文件。