python - 如何导入 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'}}
解决方案
正如@Grismar 所说,当您应该使用 a 时list
,您正在附加 a ...data
dict
默认情况下,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
推荐阅读
- python - 有没有办法让 while true 语句运行,但让后面的代码也运行?
- kubernetes - 授予 Kubernetes 服务帐户权限以从所有命名空间获取 pod
- react-native - 当我在 react-native highcharts 的图表区域外单击时,工具提示没有关闭
- javascript - 反应 | 如何从状态更新中删除 prevent.default
- algorithm - 保存数据以供以后使用 mips 程序集的方法
- css - 我应该如何在 sass/css 中编写一个选择器来申请类,而不是在整个路径中有另一个类?
- python - 更改 pyplot 子图中的直方图
- java - 如何在用户按下 imageButton 之间添加延迟?
- tfs - 如何使用户能够在本地编辑 TFS 2015 中的 HtmlFieldControl 源?
- php - 如何总结国家计数以显示每个大陆的数量