Python CSV导入循环重复次数

Python CSV导入循环重复次数,python,csv,Python,Csv,对于Python世界来说,这是相当新鲜的。我编写了以下脚本来转换我的csv文件并覆盖现有的JSON文件,准备上载到Firebase。问题是,脚本每行读取4次,这是奇数。下面是我的代码,如果能知道我的错误在哪里就好了 import csv import json from collections import OrderedDict fieldnames = ("Code", "Currency", "Rate", "Last Updated") entries = [] with open(

对于Python世界来说,这是相当新鲜的。我编写了以下脚本来转换我的csv文件并覆盖现有的JSON文件,准备上载到Firebase。问题是,脚本每行读取4次,这是奇数。下面是我的代码,如果能知道我的错误在哪里就好了

import csv
import json
from collections import OrderedDict

fieldnames = ("Code", "Currency", "Rate", "Last Updated")
entries = []

with open('rates.csv', 'r') as csvfile:
    reader = csv.DictReader(csvfile, fieldnames)
    for row in reader:
        entry = OrderedDict()
        for field in fieldnames:
            entry[field] = row[field]
            entries.append(entry)

output = {
    "rates": entries
    }

with open('rates2.json', 'w') as jsonfile:
    json.dump(output, jsonfile, indent=2, ensure_ascii=False)
    jsonfile.write('\n')
CSV示例

示例输出

{
  "rates": [
    {
      "Code": "AED ",
      "Currency": " UAE Dirham",
      "Rate": "4.2499",
      "Last Updated": "18/02/2020 10:13"
    },
    {
      "Code": "AED ",
      "Currency": " UAE Dirham",
      "Rate": "4.2499",
      "Last Updated": "18/02/2020 10:13"
    },
    {
      "Code": "AED ",
      "Currency": " UAE Dirham",
      "Rate": "4.2499",
      "Last Updated": "18/02/2020 10:13"
    },
    {
      "Code": "AED ",
      "Currency": " UAE Dirham",
      "Rate": "4.2499",
      "Last Updated": "18/02/2020 10:13"
    },
    {
      "Code": "AUD ",
      "Currency": " Australian Dollar",
      "Rate": "1.8299",
      "Last Updated": "18/02/2020 10:13"
    },
    {
      "Code": "AUD ",
      "Currency": " Australian Dollar",
      "Rate": "1.8299",
      "Last Updated": "18/02/2020 10:13"
    },
    {
      "Code": "AUD ",
      "Currency": " Australian Dollar",
      "Rate": "1.8299",
      "Last Updated": "18/02/2020 10:13"
    },
    {
      "Code": "AUD ",
      "Currency": " Australian Dollar",
      "Rate": "1.8299",
      "Last Updated": "18/02/2020 10:13"
    }
  ]
}




只需取消缩进
条目。追加(…)


否则,您将为每个字段追加一个新行,而实际上您只希望每行追加一次,而不是每字段追加一次。

只是取消缩进
条目。追加(…)


否则,您将为每个字段追加一个新行,而实际上您只希望每行追加一次,而不是每字段追加一次。

entries.append(entry)
不应位于内部循环中。您正在为每个字段而不是每一行追加它。
entries.append(entry)
不应在内部循环中。您正在为每个字段而不是每一行添加它。谢谢!来自JS背景的我不知道缩进会影响范围。这里发生的另一件事,但在这个答案中是固定的,就是您向同一个
OrderedDict
对象添加了4个引用,这就是为什么每次都会得到完整的复制,而不是
col1
,然后是
col,col2
col1、col2、col3
等等,因为每次添加到
条目
时,您也在更新所有引用。谢谢!来自JS背景的我不知道缩进会影响范围。这里发生的另一件事,但在这个答案中是固定的,就是您向同一个
OrderedDict
对象添加了4个引用,这就是为什么每次都会得到完整的复制,而不是
col1
,然后是
col,col2
col1、col2、col3
等等,因为每次添加到
条目
时,您也在更新所有引用。
with open('rates.csv', 'r') as csvfile:
    reader = csv.DictReader(csvfile, fieldnames)
    for row in reader:
        entry = OrderedDict()
        for field in fieldnames:
            entry[field] = row[field]
        entries.append(entry)