我试图从一个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)
当我运行上面的代码时,我得到一个ValueError:太多的值来解包(预期2)。我如何从csv文件创建一个字典?谢谢。
通过调用Open,然后使用csv.DictReader打开文件。
input_file = csv.DictReader(open("coors.csv"))
您可以通过迭代input_file遍历csv文件dict读取器对象的行。
for row in input_file:
print(row)
或
仅访问第一行
dictobj = csv.DictReader(open('coors.csv')).next()
更新
在python 3+版本中,这段代码会有一些变化:
reader = csv.DictReader(open('coors.csv'))
dictobj = next(reader)
我相信您正在寻找的语法如下:
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)
mydict = {rows[0]:rows[1] for rows in reader}
另外,对于python <= 2.7.1,你需要:
mydict = dict((rows[0],rows[1]) for rows in reader)
假设你有一个这样结构的CSV:
"a","b"
1,2
3,4
5,6
你希望输出是:
[{'a': '1', ' "b"': '2'}, {'a': '3', ' "b"': '4'}, {'a': '5', ' "b"': '6'}]
zip函数(还没有提到)非常简单,而且非常有用。
def read_csv(filename):
with open(filename) as f:
file_data=csv.reader(f)
headers=next(file_data)
return [dict(zip(headers,i)) for i in file_data]
如果你更喜欢熊猫,它也可以很好地做到这一点:
import pandas as pd
def read_csv(filename):
return pd.read_csv(filename).to_dict('records')