【发布时间】:2017-01-21 13:00:41
【问题描述】:
我有一个 csv 文件 (in.csv)
col1, col2, col3
Kapitän, Böse, Füller
...
我想创建一个字典列表:
a = [{'col1': 'Kapitän', 'col2': 'Böse', 'col3': 'Füller'},{...}]
在 Python 3 中可以使用
import codecs
with codecs.open('in.csv', encoding='utf-8') as f:
a = [{k: v for k, v in row.items()}
for row in csv.DictReader(f, skipinitialspace=True)]
print(a)
(我从convert csv file to list of dictionaries 获得此代码)。
不幸的是,我在 Python 2 中需要它,但我不同意它。
我试图理解https://docs.python.org/2.7/howto/unicode.html,但我觉得我太笨了,因为
import codecs
f = codecs.open('in.csv', encoding='utf-8')
for line in f:
print repr(line)
给我
u'col1,col2,col3\n'
u'K\xe4pten,B\xf6se,F\xfcller\n'
u'\n'
你有 Python 2 的解决方案吗?
这里解决了一个类似的问题:Creating a dictionary from a csv file? 但是使用标记的解决方案我得到('K\xc3\xa4pten', 'B\xc3\xb6se', 'F\xc3\xbcller')。也许编辑它以获得[{u'col1': u'K\xe4pten', u'col2': u'B\xf6se', u'col3': u'F\xfcller'}] 很容易?
【问题讨论】:
-
阅读understanding repr,你看到的是那些unicode字符串的表示(
u前缀等)。使用{k: v for k, v in row.items()},您基本上只是在重新创建字典。 -
不确定“我不同意”是什么意思,但至少对于 2.7,您仍然可以使用 DictReader:docs.python.org/2/library/csv.html#csv.DictReader。
-
@innoSPG:感谢您的链接!但对我来说有点不同:使用链接的解决方案,我得到
{'K\xc3\xa4pten': 'B\xc3\xb6se', 'col1': 'col2'}@ilja:谢谢你的提示。现在我明白上面的代码工作正常。 @albert:我只是想说,我无法编辑这些示例中提到的代码供我使用,因为我过度紧张。
标签: python list python-2.7 csv dictionary