[英]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.