如何在Python中合并多个文件

2024-10-04 03:28:15 发布

您现在位置:Python中文网/ 问答频道 /正文

非常简单的问题!我想合并多个JSON文件和

看看这个:

f1data = f2data = f3data = f4data = f5data = f6data = "" 
 
with open('1.json') as f1: 
  f1data = f1.read() 
with open('2.json') as f2: 
  f2data = f2.read() 
with open('3.json') as f3: 
  f3data = f3.read() 
with open('4.json') as f4: 
  f4data = f4.read() 
with open('5.json') as f5: 
  f5data = f5.read() 
with open('6.json') as f6: 
  f6data = f6.read() 
 
f1data += "\n"
f1data += f2data += f3data += f4data += f5data += f6data 
with open ('merged.json', 'a') as f3: 
  f3.write(f1data)
  

输出应该是这样的:

[
    {
        "id": "1",
        "name": "John",
    },

    {
        "id": "2",
        "name": "Tom",
    }
]

问题是Visual Code Studio在下面出现了一条红线: f1data+=f2data+=f3data+=f4data+=f5data+=f6data

我不知道为什么!代码无法运行!没有错误,所以我可以排除故障。有什么建议吗


Tags: jsonreadaswithopenf2f1f3
3条回答

“合并”文件的输出不会像您指定的那样格式化,但这表明了我个人将使用的方法:-

import json
alist = []
with open('/Users/andy/merged.json', 'w') as outfile:
    for k in range(6):
        with open(f'/Users/andy/{k+1}.json') as infile:
            alist.append(json.load(infile))
    outfile.write(str(alist))

此代码中有几点需要改进:

    你应该以更“程序化”的方式考虑:

    如果声明一个包含要访问的json文件名称的列表,如下所示:

    files_names = ["1","2","3","4","5","6"]
    

    然后,您可以执行以下操作:

    files_names = ["1","2","3","4","5","6"]
    data = ""
    for file_name in files_names :
       with open(file_name+".json" ,"r") as file_handle :
          temp_data = file_handle.read()
          data = data + temp_data 
    
    with open ('merged.json', 'a') as file_handle : 
      file_handle.write(data)
    

    它更简洁、更具python风格,并且如果您需要7个json输入文件,就可以轻松地进行修改

  • 如果您的文件总是1,2,3,4,那么您也可以这样做for循环迭代:知道您想要的最高json文件号

    max_file_name = 6
    for file_name in range(1,max_file_name):#i added 1 as first arg of 
    #range, assuming your files naming start at 1 and not at 0
       str(file_name) + ".json" 
    
  • 为了确保Json是有效的Json,可以使用Json标准库。不过这需要更多的时间,因为文件将被解析,而不是直接转储到另一个文件中,但是如果您没有100000个文件要合并,并且您不确定在第一个plase中创建json文件的代码是否有效,那么您将看不到区别

    要想使用它,就去做吧

    import json
    max_file_name = 6
    data = ""
    for file_name in range(max_file_name):
       with open(str(file_name) + ".json" ,"r") as file_handle :
          temp_data = json.load(file_handle )
          data = {**data , **temp_data}
          # ** is used to "unload" every key value in a dict at runtime, 
          # as if you provided them one by one separated by comas :
          # data["key1"],data["key2"]...
          # doing so for both json objects and puttin them 
          # into a dictionnay is effectively just like merging them.
    
    with open ('merged.json', 'a') as file_handle : 
      json.dump(data,file_handle)
    

你有几种方法:

with open('a', 'w') as a, open('b', 'w') as b, ..:
    do_something()

files_list = ['a', 'b', ..]
for file in files_list:
    with open(file, 'w')...

使用contextlib.ExitStack

with ExitStack() as stack:
    files = [stack.enter_context(open(fname)) for fname in filenames]
    # Do something with "files"

相关问题 更多 >