如何在Python3中处理非utf8 csv文件

如何在Python3中处理非utf8 csv文件,python,python-3.x,Python,Python 3.x,我需要处理大量的CSV文件 这些文件来自中国,所以我猜编码是非utf8 然而,这些文件甚至不能在Python3中读取 如何使用Python 3读取这些文件并写入新文件 以下是片段 with open('20120901_20120915_ACCLOG.csv', 'r') as f: sources = f.readlines() print(sources) 我得到一个错误:UnicodeDecodeError:“utf-8”编解码器无法解码第3位的字节0xb8:无效的起始

我需要处理大量的CSV文件

这些文件来自中国,所以我猜编码是非utf8

然而,这些文件甚至不能在Python3中读取

如何使用Python 3读取这些文件并写入新文件

以下是片段

with open('20120901_20120915_ACCLOG.csv', 'r')  as f:
    sources = f.readlines()
    print(sources)
我得到一个错误:UnicodeDecodeError:“utf-8”编解码器无法解码第3位的字节0xb8:无效的起始字节

以下是XLS文件和pyhton脚本示例


打开文件时,需要指定正确的编解码器。我们只能猜测正确的编解码器是什么;您上载的GitHub示例在使用其中一个时解码效果很好,但这些编解码器非常急切(未使用其中一个进行编码的文本也可以解码,只是结果不正确)

如果已知编解码器,则需要询问这些CSV文件的来源。这可以在文档中,也可以在HTTP
Content-Type
头中(查找
charset=
参数),或者通过其他一些元数据方式

要在打开文件时指定编解码器,请使用
encoding
参数:

with open('20120901_20120915_ACCLOG.csv', 'r', encoding='gbk')  as f:

请参阅表格,了解Python3可以立即处理的编解码器;有多种中文编解码器可供选择。

该文件似乎编码为GB2312。将
encoding
选项指定为
open()
,如下所示:

with open('20120901_20120915_ACCLOG.csv', encoding='GB2312') as f:
    sources = f.read()
    print(sources)
我使用模块确定了编码:

值得注意的是,有几种编解码器(编码)适用于此文件: gb2312、gbk和gb18030都产生相同的结果。 big5hkscs也可以工作,但产生的结果与其他三种编解码器不同。我不确定哪一个是正确的,或者其中是否有一个是正确的


顺便说一句,该文件似乎不是一个普通的CSV文件。

找到他们的编解码器并在打开文件时使用:
open('20120901\u 20120915\u ACCLOG.CSV','r',encoding='')
。我们无法确定使用的编解码器。您可以使用诸如
chardet
之类的工具进行猜测(基于统计信息),或者您可以尝试查看这些文件的源(从何处获取)是否指定了用于这些文件的编解码器。然而,这不是Python的问题。上载到GitHub的文件可能是用其中一个进行编码的。感谢您的有用建议。你为我节省了很多时间。您还应该接受Martijn的建议,特别是关于使用作者或其他元数据验证字符集的建议。
>>> chardet.detect(open('20120901_20120915_ACCLOG.csv','rb').read())
{'encoding': 'GB2312', 'confidence': 0.99}