Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-如何在每次循环后创建新的Json文件?_Python_Json - Fatal编程技术网

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

Python-如何在每次循环后创建新的Json文件?,python,json,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格式,其中包含C

因此,我有一个CSV文件,稍后我将其转换为JSON文件。然而,我想做的是,我想为每个新的json对象保存到一个新的json文件中。意思是这样的:

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

{
"first_name": "Stack",
"last_name": "Overflow",
"color": "Red"
}
如何将其从CSV格式更改为JSON格式,是因为我将其创建为dict格式,其中包含CSV格式和基于“名字”、“姓氏”和颜色创建的字段名称

它看起来像是:

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循环中的内容(使用write),然后每当有新内容时,它就会创建一个新的json文件。基本上意味着每次完成一行时,都要创建新的json?

您可以尝试以下方法:

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')

您只需要决定这些文件的命名方式。我的示例使用文件名中的第一个名称。

您可以使用上下文管理器打开并写入每行的新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')

对于大多数代码(除了打开CSV文件的两行代码外),在每次迭代中打开、写入和关闭一个新的JSON文件时,使用一个附加的
。@MichaelButscher但是我需要先创建JSON文件才能写入吗?是的,您必须先创建(并打开,这与此处的操作相同)在写入之前先创建一个文件。是否要打开一个json并为每个csv行创建另一个json文件?或者打开json并将csv行保存在json中?你的解释和代码有点矛盾,我很困惑。你真的想写无数个单独的JSON文件吗?为什么一个JSON文件不包含这些dict对象的列表呢?我使用了它,它帮助我实现了我想要的目标!非常感谢!:)