【问题标题】:For loop not iterating through CSV with PythonFor 循环不使用 Python 遍历 CSV
【发布时间】:2019-11-11 10:16:39
【问题描述】:

基本上我在这里要做的是将 CSV 文件中的所有数据以嵌套格式放入字典中,这样我就可以在需要后转储 json。我需要格式为[{"name":"Ollie","email":"josh@apple.com","phone":"0444444444","sizes":[],"taskAmount":1,"singleCheckout":true,"billingDifferent":false,"favorite":true

的json

我有一个 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 中的最后一行数据,就好像它是向后开始的一样。

【问题讨论】:

  • 您将所有行分配到同一个字典中,底部的行覆盖开头的行

标签: python json csv dictionary


【解决方案1】:

出了什么问题?

当您从 csv 文件中读取行并在 for 循环中将它们分配给 new_data_dict 时,您会反复覆盖已存储在其中的行。

如何解决?

您可以将它们全部放入一个列表或另一个字典中,例如:

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)

然后输出将看起来像您描述为所需的输出。

【讨论】:

  • 原来我在应用您的修复后打印了错误的变量。救世主!
  • 这个东西解决了我的问题,但我不明白,为什么它会被自动覆盖?我是 python 新手
  • @TayyabFerozi = 符号表示赋值,无论 = 符号左边的变量持有什么,它都会被右边的内容覆盖(或设置) .在 OP 第 2 行中,声明了一个新字典,现在它是空的,只是 {},在 for 循环内,这个新字典被替换(设置​​为)@987654328 右侧的新行@ 标志。希望这会有所帮助,如果没有,我建议您自己尝试代码,并在 for 循环中添加 print 语句。
  • @TayyabFerozi 而不是“分配”或替换,它应该是“附加”。
猜你喜欢
  • 2021-03-04
  • 2017-01-23
  • 1970-01-01
  • 2020-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-17
相关资源
最近更新 更多