【问题标题】:Which encoding is in use by csv.DictReader when reading csv?读取 csv 时 csv.DictReader 使用哪种编码?
【发布时间】:2016-09-28 11:49:59
【问题描述】:
我有一个保存为 UTF-8 编码的 csv 文件。
它包含非 ASCII 字符 [元音变音]。
我正在使用以下方式读取文件:
csv.DictReader(<file>,delimiter=<delimiter>).
我的问题是:
- 正在读取的文件采用哪种编码方式?
-
我注意到为了将字符串引用为 utf-8,我需要执行:
str.decode('utf-8')
有没有更好的方法,然后以一种编码读取文件,然后转换为另一种编码,即utf-8?
[Python 版本:2.7]
【问题讨论】:
标签:
python
python-2.7
csv
encoding
utf-8
【解决方案1】:
在 Python 2.7 中,CSV 模块不应用任何解码 - 它以二进制模式打开文件并返回字节字符串。
使用https://github.com/jdunck/python-unicodecsv,即时解码。
像这样使用它:
with open("myfile.csv", 'rb') as my_file:
r = unicodecsv.DictReader(my_file, encoding='utf-8')
r 将包含一个 Unicode 字典。以binary 模式打开源文件很重要。
【解决方案2】:
使用实例和类来实现这一点怎么样?
您可以在类级别存储共享字典,也可以让它加载 Unicode 文本文件,甚至检测它们的编码,无论是否使用 BOM 文件掩码。
很久以前,我编写了一个简单的库,它用支持 Unicode 的库覆盖了默认的 open()。
如果您执行import tendo.unicode,您也可以更改 csv 库加载文件的方式。
如果您的文件没有 BOM 标头,则库将采用 UTF-8 而不是旧的 ascii。如果需要,您甚至可以指定其他后备编码。