代码之家  ›  专栏  ›  技术社区  ›  WeInThis

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

  •  1
  • WeInThis  · 技术社区  · 6 年前

    所以我有一个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\u name”、“last\u 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循环中的内容(带write),然后每当有新内容时,它就会创建一个新的json文件。基本上就是说每次一行完成后,都要创建新的json?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Ralf    6 年前

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

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

        2
  •  2
  •   pythomatic    6 年前

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