首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Python合并多个JSON文件

使用Python合并多个JSON文件
EN

Code Review用户
提问于 2015-04-17 20:46:49
回答 2查看 50.8K关注 0票数 14

我有多个(1000+) JSON文件,每个文件都包含一个JSON数组。我想把所有这些文件合并成一个文件。

我想出了以下内容,它读取这些文件中的每一个,并创建一个包含所有内容的新对象。然后将这个新对象写入一个新文件中。

这种方法有效吗?有没有更好的方法来做到这一点?

代码语言:javascript
运行
复制
head = []
with open("result.json", "w") as outfile:
    for f in file_list:
        with open(f, 'rb') as infile:
            file_data = json.load(infile)
            head += file_data
    json.dump(head, outfile)
EN

回答 2

Code Review用户

发布于 2015-06-23 00:54:19

  1. 首先,如果你想要重用,就把它变成一个函数。函数应该有相应的参数。
  2. 其次,我建议直接将每个文件的内容直接写入合并文件,而不是分配变量来存储所有要写入的JSON数据。这将有助于防止内存问题。
  3. 最后,我在变量命名方面有一些挑剔的提示。最好是,head应该有一个类似于merged_files的名称,而且您不应该使用f作为迭代器变量。像json_file这样的东西会更好。
票数 7
EN

Code Review用户

发布于 2016-07-09 13:55:32

这在本质上是阿列克斯兰评论阐明的:

解析和序列化JSON并不是免费的,所以您可能希望避免它。我认为您可以只输出"[",第一个文件,",",第二个文件等等,"]"并将其称为一天。如果所有输入都是有效的JSON,除非我大错特错,否则这也应该是有效的JSON。

在代码中,版本1:

代码语言:javascript
运行
复制
def cat_json(outfile, infiles):
    file(outfile, "w")\
        .write("[%s]" % (",".join([mangle(file(f).read()) for f in infiles])))

def mangle(s):
    return s.strip()[1:-1]

第2版:

代码语言:javascript
运行
复制
def cat_json(output_filename, input_filenames):
    with file(output_filename, "w") as outfile:
        first = True
        for infile_name in input_filenames:
            with file(infile_name) as infile:
                if first:
                    outfile.write('[')
                    first = False
                else:
                    outfile.write(',')
                outfile.write(mangle(infile.read()))
        outfile.write(']')

第二个版本有一些优点:它的内存需求应该类似于最长输入文件的大小,而第一个版本则需要所有文件大小之和的两倍。同时打开的文件句柄的数量也较小,因此它应该适用于任意数量的文件。

通过使用with,它也具有确定性(并且是即时的!)离开每个with块时,文件句柄的解除分配,即使在具有非即时垃圾收集的python实现中(如pypy和jython等)。

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/87254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档