使用python将多个csv文件转换为json

时间:2019-06-26 05:25:54

标签: json python-3.x csv

我正在尝试将文件夹中的csv文件转换为单个json文件。下面的代码可以完成这项工作,但问题是,json文件的第一个csv编写了多次。下面是我尝试的代码。我猜我在分配数据变量时出错了。帮我解决

import csv, json, os
dir_path = 'C:/Users/USER/Desktop/output_files'
inputfiles = [file for file in os.listdir(dir_path) if file.endswith('.csv')]
outputfile = "data_backup1.json"

for file in inputfiles:
    filepath = os.path.join(dir_path, file)
    data = {}
    with open(filepath, "r") as csvfile:       
        reader = csv.DictReader(csvfile)
        for row in reader:
            id = row['ID']
            data[id] = row

    with open(outputfile, "a") as jsonfile:
        jsonfile.write(json.dumps(data, indent=4))

预期的输出:Json文件只需将每个csv写入一次即可。

1 个答案:

答案 0 :(得分:0)

如果您的.csv文件和所有行的确具有不同的['ID'],则您分配的字典键应该是唯一的。在这种情况下,您的字典正在增长,每个读者.csv行只有一个条目。

您必须更改jsonfile.write()函数的缩进,如下所示,以仅生成一个.json文件。要对条目进行排序,可以在此函数中添加sort_keys=True

for file in inputfiles:
    filepath = os.path.join(dir_path, file)
    data = {}
    with open(filepath, "r") as csvfile:       
        reader = csv.DictReader(csvfile)
        for row in reader:
            id = row['ID']
            data[id] = row

with open(outputfile, "a") as jsonfile:
    jsonfile.write(json.dumps(data, indent=4, sort_keys=True))