我有 5 個檔案,我想從中提取每一行(總共 24 行)并將其保存到一個新檔案中。我設法找到了一個可以做到這一點的代碼,但他們就是這樣,每次我必須手動更改適當的原始檔案的數量和我想要將其保存到的檔案的數量以及每次每行的數量。
編碼:
x1= np.loadtxt("x_p2_40.txt")
x2= np.loadtxt("x_p4_40.txt")
x3= np.loadtxt("x_p6_40.txt")
x4= np.loadtxt("x_p8_40.txt")
x5= np.loadtxt("x_p1_40.txt")
with open("x_p1_40.txt", "r") as file:
content = file.read()
first_line = content.split('\n', 1)[0]
with open("1_p_40_x.txt", "a" ) as f :
f.write("\n")
with open("1_p_40_x.txt", "a" ) as fa :
fa.write(first_line)
print(first_line)
我是python的初學者,我不確定如何為此創建一個回圈,因為我認為我需要一個回圈?
謝謝!
uj5u.com熱心網友回復:
由于您在這里有多個檔案,您可以在串列中定義它們的名稱,并使用串列推導來打開它們的檔案句柄:
input_files = ["x_p2_40.txt", "x_p4_40.txt", "x_p6_40.txt", "x_p8_40.txt", "x_p1_40.txt"]
file_handles = [open(f, "r") for f in input_files]
由于這些檔案句柄中的每一個都是一個迭代器,每次迭代它時都會產生一行,因此您可以簡單地zip()所有這些檔案句柄同時迭代它們。還輸入 anenumerate()以獲取行號:
for line_num, files_lines in enumerate(zip(*file_handles), 1):
out_file = f"{line_num}_p_40.txt"
# Remove trailing whitespace on all lines, then add a newline
files_lines = [f.rstrip() "\n" for f in files_lines]
with open(out_file, "w") as of:
of.writelines(files_lines)
包含三個檔案:
x_p2_40.txt:
2_1
2_2
2_3
2_4
x_p4_40.txt:
4_1
4_2
4_3
4_4
x_p6_40.txt:
6_1
6_2
6_3
6_4
我得到以下輸出:
1_p_40.txt:
2_1
4_1
6_1
2_p_40.txt:
2_2
4_2
6_2
3_p_40.txt:
2_3
4_3
6_3
4_p_40.txt:
2_4
4_4
6_4
最后,由于我們沒有使用背景關系管理器來打開原始檔案句柄,請記住在完成后關閉它們:
for fh in file_handles:
fh.close()
如果您的檔案行數不等,并且您想為所有行創建檔案,請考慮使用itertools.zip_longest()而不是zip()
uj5u.com熱心網友回復:
為了讀取每個輸入檔案,您可以將它們存盤在一個串列中并使用for 回圈對其進行迭代。然后我們使用函式將每一行添加到一個串列中extend():
inputFiles = ["x_p2_40.txt", "x_p4_40.txt", "x_p6_40.txt", "x_p8_40.txt", "x_p1_40.txt"]
outputFile = "outputfile.txt"
lines = []
for filename in inputFiles:
with open(filename, 'r') as f:
lines.extend(f.readlines())
lines[-1] = '\n'
最后,您可以將所有行寫入輸出檔案:
with open(outputFile, 'w') as f:
f.write(''.join(lines))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/490983.html
