问题描述
所以我有一个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循环完成一个“行”以创建一个包含for-loop内部的新json文件(使用write)时,我怎么能这样做,然后每当有新的时候,它就会创建一个新的json文件。 基本上意味着每次完成一行,创建新的json?
1楼
您可以使用上下文管理器打开并写入每行的新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')
2楼
你可以试试这个:
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')
您只需要决定如何命名这些文件。 我的示例使用文件名中的第一个名称。