【发布时间】:2015-08-31 11:27:51
【问题描述】:
我正在尝试使用 DictReader 读取一个 CSV 文件。
但是这样做:
with("BeerRatings.csv", "r", "utf-8") as f:
reader = csv.DictReader(f)
for line in reader:
print line
给了我一些丑陋的 unicode:
{'Rating': '4', 'Brewery': 'Tr\xc3\xb6egs Brewing Company', 'Beer name': 'Tr\xc3\xb6egs Hopback Amber Ale'}
{'Rating': '4.59', 'Brewery': 'Brasserie Dieu Du Ciel', 'Beer name': 'P\xc3\xa9ch\xc3\xa9 Mortel - Bourbon Barrel Aged'} etc.
因此,在阅读 stackoverflow 时,我使用编解码器模块将我的代码编辑为:
import codecs
with codecs.open("BeerRatings.csv", "r", "utf-8") as f:
reader = csv.DictReader(f)
for line in reader:
print line
但这给了我一个UnicodeEncodeError: 'ascii' codec can't encode character u'\xea' in position 9: ordinal not in range(128)。
关于如何解决此问题的任何提示?
更新,也就是更多的到处乱窜:
def UnicodeDictReader(utf8_data, **kwargs):
csv_reader = csv.DictReader(utf8_data, **kwargs)
for row in csv_reader:
yield {key: unicode(value, 'utf-8') for key, value in row.iteritems()}
with open("BeerRatings.csv", "r") as f:
reader = UnicodeDictReader(f)
for line in reader:
print line
这仍然给我一个不太理想的输出......
{'Rating': u'4', 'Brewery': u'Tr\xf6egs Brewing Company', 'Beer name': u'Tr\xf6egs Hopback Amber Ale'}
{'Rating': u'4.59', 'Brewery': u'Brasserie Dieu Du Ciel', 'Beer name': u'P\xe9ch\xe9 Mortel - Bourbon Barrel Aged'}
【问题讨论】:
-
你用的是什么 Python 版本?
-
尝试使用this page上的Unicode Writer和Reader的最后一个示例
-
@VikasNehaOjha - 尝试进行适当的更改(查看我的帖子更新)但无济于事......有什么建议吗?
-
嗯,我认为这是意料之中的,请检查控制台的编码。
-
@VikasNehaOjha - 你是什么意思?
标签: python-2.7 csv dictionary unicode codec