我正在尝试从csv文件创建一个字典.csv文件的第一列包含唯一键,第二列包含值.csv文件的每一行代表字典中唯一的键值对.我试图使用csv.DictReader和csv.DictWriter类,但我只能弄清楚如何为每一行生成一个新的字典.我想要一本字典.这是我尝试使用的代码:
import csv
with open('coors.csv', mode='r') as infile:
reader = csv.reader(infile)
with open('coors_new.csv', mode='w') as outfile:
writer = csv.writer(outfile)
for rows in reader:
k = rows[0]
v = rows[1]
mydict = {k:v for k, v in rows}
print(mydict)
Run Code Online (Sandbox Code Playgroud)
当我运行上面的代码时,我得到了一个ValueError: too many values to unpack (expected 2).如何从csv文件创建一个字典?谢谢.
我有一个包含数千行的生成文件,如下所示:
CODE,XXX,DATE,20101201,TIME,070400,CONDITION_CODES,LTXT,PRICE,999.0000,QUANTITY,100,TSN,1510000001
某些行具有更多字段而其他行具有更少字段,但所有行都遵循相同的键值对模式,并且每行具有TSN字段.
在对文件进行一些分析时,我写了一个像下面这样的循环来将文件读入字典:
#!/usr/bin/env python
from sys import argv
records = {}
for line in open(argv[1]):
fields = line.strip().split(',')
record = dict(zip(fields[::2], fields[1::2]))
records[record['TSN']] = record
print 'Found %d records in the file.' % len(records)
Run Code Online (Sandbox Code Playgroud)
...这很好,完全符合我的要求(这print只是一个简单的例子).
但是,对我来说它并没有感觉特别"pythonic"和以下行:
dict(zip(fields[::2], fields[1::2]))
Run Code Online (Sandbox Code Playgroud)
这只是感觉"笨重"(它在田野上迭代了多少次?).
是否有更好的方法在Python 2.6中使用标准模块进行此操作?