从csv文件创建字典?

233 投票
19 回答
740837 浏览
提问于 2025-04-16 21:48

我正在尝试从一个csv文件创建一个字典。这个csv文件的第一列包含唯一的键,第二列包含对应的值。每一行代表字典中的一个键值对。我试着使用csv.DictReadercsv.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: too many values to unpack (expected 2)。我该如何从csv文件创建一个字典呢?谢谢。

19 个回答

76

在编程中,有时候我们需要在代码里做一些判断,看看某个条件是否成立。比如说,我们想知道一个数字是不是大于零。如果是,我们就可以执行某个操作;如果不是,我们就可以选择其他的操作。

这种判断通常用“如果”这个词来表示。在代码中,这种判断叫做“条件语句”。它帮助我们根据不同的情况来决定程序的走向。

简单来说,条件语句就像是一个分岔路口,程序在这里需要选择一条路走下去。希望这个解释能让你更容易理解条件语句的作用!

import csv
reader = csv.reader(open('filename.csv', 'r'))
d = {}
for row in reader:
   k, v = row
   d[k] = v
144

通过调用 open 函数来打开文件,然后使用 csv.DictReader 来处理它。

input_file = csv.DictReader(open("coors.csv"))

你可以通过遍历 input_file 来逐行读取 csv 文件中的内容。

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) 
233

我觉得你想要的语法应该是这样的:

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)

撰写回答