[英]How to write multiple output text file from multiple input text file with different name by using glob.glob in python?
[英]Input a text file and write multiple output files in Python
嗨,大家好,我正在輸入filename.txt並生成多個輸出文件filename1.txt,filename2.txt和filename3.txt。 更具體地說,這里是filename.txt中的輸入數據:
Time(ms) Channel 1 Channel 2 Channel 3
0.0 4.5 3.6 125
1.0 3.0 3.4 98
2.0 100 3.0 59
3.0 23 45.9 2.1
4.0 34 123 35
5.0 2.1 222 98
filename1.txt應該只產生時間和通道1列的數據filename2.txt應該只產生時間和通道2列的數據filename3.txt應該只產生時間和通道3列的數據
源代碼:
with open('filename.txt', 'r') as input:
for i in range(1,4):
with open('filename%i.txt' %i, 'w') as output:
for line in input:
columns = line.strip().split()
for j in range(1,4):
output.write('{:10}{:10}\n'.format(columns[0], columns[j+1]))
編譯后,我得到了文本文件filename1,filename2和filename3,但是只有filename1中的數據。 filename2和filename3數據發生了什么?
for line in input
的行會耗盡input
文件中的所有行。 如果您想再次瀏覽文件,則必須重新加載文件並從頭開始重新開始...或先將它們復制到另一個列表中。
您只讀取了一次輸入,但是嘗試遍歷所有行三次。 您可以打開所有3個輸出並同時對其進行寫入,也可以打開輸入3次(每個輸出文件一次)。 最佳方法將取決於您的特定要求(文件的大小,輸出文件的數量等)。
打開3次會產生更清晰的代碼,但效率可能較低:
for i in range(1,4):
with open('filename.txt', 'r') as input:
with open('filename%i.txt' %i, 'w') as output:
for line in input:
columns = line.strip().split()
output.write('{:10}{:10}\n'.format(columns[0], columns[i]))
如果沒有with
子句,一次打開所有輸出文件的通用解決方案會更好:
files = [open('filename%i.txt' %i, 'w') for i in range(1,4)]
with open('filename.txt', 'r') as input:
for line in input:
columns = line.strip().split()
for j in range(1,4):
files[j-1].write('{:10}{:10}\n'.format(columns[0], columns[j]))
for f in files:
f.close()
(在這種情況下,您也必須手動處理異常)
只是一個小費。 在第二個with
語句之后,添加
input.seek(0)
也可以做到這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.