Python CSV导入循环重复次数
对于Python世界来说,这是相当新鲜的。我编写了以下脚本来转换我的csv文件并覆盖现有的JSON文件,准备上载到Firebase。问题是,脚本每行读取4次,这是奇数。下面是我的代码,如果能知道我的错误在哪里就好了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(
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)