我试图从一个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文件创建一个字典?谢谢。


当前回答

以熊猫为例,这就容易得多。 假设你有以下CSV格式的数据,我们把它命名为test.txt / test.csv(你知道CSV是一种文本文件)

a,b,c,d
1,2,3,4
5,6,7,8

现在用熊猫

import pandas as pd
df = pd.read_csv("./text.txt")
df_to_doct = df.to_dict()

对于每一行,它都是

df.to_dict(orient='records')

就是这样。

其他回答

下面是一个CSV to Dict的方法:

import pandas

data = pandas.read_csv('coors.csv')

the_dictionary_name = {row.k: row.v for (index, row) in data.iterrows()}

如果你可以使用numpy包,那么你可以像下面这样做:

import numpy as np

lines = np.genfromtxt("coors.csv", delimiter=",", dtype=None)
my_dict = dict()
for i in range(len(lines)):
   my_dict[lines[i][0]] = lines[i][1]

一行程序解决方案

import pandas as pd

dict = {row[0] : row[1] for _, row in pd.read_csv("file.csv").iterrows()}

通过调用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) 

对于简单的csv文件,例如以下文件

id,col1,col2,col3
row1,r1c1,r1c2,r1c3
row2,r2c1,r2c2,r2c3
row3,r3c1,r3c2,r3c3
row4,r4c1,r4c2,r4c3

您可以仅使用内置函数将其转换为Python字典

with open(csv_file) as f:
    csv_list = [[val.strip() for val in r.split(",")] for r in f.readlines()]

(_, *header), *data = csv_list
csv_dict = {}
for row in data:
    key, *values = row   
    csv_dict[key] = {key: value for key, value in zip(header, values)}

这将产生以下字典

{'row1': {'col1': 'r1c1', 'col2': 'r1c2', 'col3': 'r1c3'},
 'row2': {'col1': 'r2c1', 'col2': 'r2c2', 'col3': 'r2c3'},
 'row3': {'col1': 'r3c1', 'col2': 'r3c2', 'col3': 'r3c3'},
 'row4': {'col1': 'r4c1', 'col2': 'r4c2', 'col3': 'r4c3'}}

注意:Python字典有唯一的键,所以如果你的csv文件有重复的id,你应该把每一行都附加到一个列表中。

for row in data:
    key, *values = row

    if key not in csv_dict:
            csv_dict[key] = []

    csv_dict[key].append({key: value for key, value in zip(header, values)})