簡體   English   中英

輸入文本文件並使用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.

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