python - For 循环不使用 Python 遍历 CSV
问题描述
本质上,我在这里尝试做的是将 CSV 文件中的所有数据以嵌套格式放入字典中,这样我就可以在需要后转储 json。我需要像这样格式化的 json[{"name":"Ollie","email":"josh@apple.com","phone":"0444444444","sizes":[],"taskAmount":1,"singleCheckout":true,"billingDifferent":false,"favorite":true
我有一个 for 循环,它应该获取所有 csv 值并以我的正确格式将它们放入字典中。
我试过查看我的循环,它检查出来了,所以我看不出它为什么不起作用。此外,在 if 语句中,如果我new_data_dict[row[0]]
代替new_data_dict
它运行正常,但没有以我想要的格式出现。
我的代码在这里
profiles = []
new_data_dict = {}
with open("test.csv", 'r') as data_file:
reader = csv.reader(data_file)
for row in reader:
if row[21] == 'null':
new_data_dict = {"name":row[0],"email":row[1],"phone":row[15],"sizes":[],"taskAmount":1,"singleCheckout":True,"billingDifferent":False,"favorite":False,"card":{"number":row[5],"expiryMonth":row[7],"expiryYear":row[8],"cvv":row[6]},}
else:
new_data_dict = {"name":row[0],"email":row[1],"phone":row[15],"sizes":[],"taskAmount":1,"singleCheckout":True,"billingDifferent":True,"favorite":False,"card":{"number":row[5],"expiryMonth":row[7],"expiryYear":row[8],"cvv":row[6]},"delivery":{"firstName":row[20],"lastName":row[21], }}
print(new_data_dict)
我的输入文件包含一些敏感信息,所以我无法真正显示它,但代码让您了解行中的内容。
我得到的是循环的一次迭代,它也恰好是 csv 中的最后一行数据,就好像它是向后开始的一样。
解决方案
什么地方出了错?
当您从 csv 文件中读取行并将它们分配到new_data_dict
循环for
中时,您会反复覆盖已经存储在其中的行。
如何解决?
您可以将它们全部放入列表或另一个字典中,例如:
all_records = []
for row in reader:
row_data_dict = {"name":row[0],"email":row[1],"phone":row[15],"sizes":[]...}
all_records.append(row_data_dict)
然后输出看起来就像您描述的所需输出。
推荐阅读
- ros - ROS 访问网络摄像头
- javascript - 在本地主机上运行 JS - 服务器 js
- c# - C# 小于一定数量
- c++ - 在执行时在布局中添加自定义小部件
- javascript - svg-pan-zoom 平移/缩放到任何对象
- postgresql - 如何使用 Postgres “ROLLBACK TO SAVEPOINT”和“FOR UPDATE SKIP LOCKED”?
- c - C 编程 yes no 带有错误捕获器的循环
- git - 在 satis 存储库中使用本地存储库
- java - 序列化和反序列化类似 Trie 的数据结构
- c# - 将数据从 app.config 解析到 WPF ListBox