簡體   English   中英

如何在Python中合並多個文件

[英]How to merge multiple files in 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

我不知道為什么! 而且代碼不能運行! 沒有錯誤,所以我可以排除故障..有什么建議嗎?

這段代碼有幾點需要改進:

  • 您應該考慮以更“程序化”的方式執行它:

    如果您聲明一個包含要訪問的 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)

    它更簡潔,更pythonic,如果你需要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 個文件要合並,並且您不確定在其中創建 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"

“合並”文件的輸出不會完全按照您指定的格式進行格式化,但這顯示了我個人使用的方法:-

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM