Python-如何在每个循环后创建新的Json文件?

时间:2018-10-04 20:01:54

标签: python json

所以我有一个CSV文件,以后可以将其转换为JSON文件。但是我想做的是我想为每个新的json对象保存到一个新的json文件。意思是这样的:

{
"first_name": "Hello",
"last_name": "World",
"color": "black"
},

{
"first_name": "Stack",
"last_name": "Overflow",
"color": "Red"
}

如何将其更改为从CSV到JSON的格式,是将其创建为dict,在其中具有CSV格式以及基于“ first_name”,“ last_name_”和颜色创建的字段名称。

它看起来像这样:

jsonfile = open('newfilejson.json', 'w')
fieldnames = ("first_name","last_name","color")
reader = csv.DictReader(csvfile, fieldnames)

for row in reader:
    jsonfile.write('"first_name": "' + row['first_name'] + '",\n')
    jsonfile.write('"last_name": "' + row['last_name'] + '",\n')
    jsonfile.write('"color": "' + row['color'] + '",\n')

但是这基本上只会保存到一个文件中,我的问题是:

我怎样才能使它每次从for循环中完成一个“行”以创建一个新的json文件,该文件包含for循环中的内容(带有写入),然后每当有新内容时,就创建一个新的json文件。基本上意味着每次完成一行后,创建新的json吗?

2 个答案:

答案 0 :(得分:2)

您可以使用上下文管理器为每一行打开并写入新的json文件:

fieldnames = ("first_name","last_name","color")
reader = csv.DictReader(csvfile, fieldnames)

for row in reader:
    with open('%s_%s.json' % (row['first_name'], row['last_name']), 'w') as jsonfile:
        jsonfile.write('"first_name": "' + row['first_name'] + '",\n')
        jsonfile.write('"last_name": "' + row['last_name'] + '",\n')
        jsonfile.write('"color": "' + row['color'] + '",\n')

答案 1 :(得分:1)

您可以尝试以下方法:

for row in reader:
    filename = 'a_file_{}'.format(row['first_name'])
    with open(filename, 'w') as f:
        f.write('"first_name": "' + row['first_name'] + '",\n')
        f.write('"last_name": "' + row['last_name'] + '",\n')
        f.write('"color": "' + row['color'] + '",\n')

您只需要决定如何命名这些文件。我的示例使用文件名中的名字。