首页 > 解决方案 > 如何导入 csv 并将数据保存在字典中?

问题描述

我在这里尝试导入仅在第 2 行中包含数据的 CSV 文件,并且我想将其保存在第 1 行中提到的基于字典的标题中。

我的 csv 看起来像这样,

R1C1: 
name,task1,task2,task3

Row2Column1:
dave,allocation,field,supervision

而且,如果我有更多的任务,如果我给Row2Column1它,它应该命名task4为第四个任务。(例如):

R1C1: 
name,task1,task2,task3

Row2Colum1:
dave,allocation,field,supervision,manage

(管理任务应该自动命名为task4

import csv
path = "C:\\tasks.csv"
file = open(path, newline='')
reader = csv.reader(file)
header = next(reader)
data = []
for row in reader:

    name = row[0]
    tasks = row[1]
    data.append([name, tasks])

print(data)

实际结果:

[['dave', 'allocation']]

预期的:

{name: 'dave', task1: 'allocation', task2: 'field', task3: 'supervision', task4: 'manage'}}

标签: pythoncsvdictionary

解决方案


正如@Grismar 所说,当您应该使用 a 时list,您正在附加 a ...datadict

默认情况下,csv reader 读取一行作为列表。所以你有以下内容:

header = ['name', 'task1', 'task2', 'task3']
tasks = [ <values> ]

如果要添加字典,可以将这两个列表合并为一个,如下所示: 如何在 Python 中将两个列表合并为一个字典?

您的代码应该如下所示:

from itertools import izip_longest

data = {} # initialize as dictionary

for index, task in enumerate(izip_longest(header,tasks)):
    key = task[0]
    val = task[1]

    if key is None:
      key = "task%d" % (index + 1) # if there are more tasks than headers

    data[key] = val 

推荐阅读