2017-10-28 46 views
-1

我有一個文件,它看起來像這樣,我想轉:的Python:用於循環到一個文件的輸出內容 - 目前輸出最後一排只有

ID_1 S1 S2 S3 
SNP1 1 0 1 
SNP2 2 1 0 
SNP3 1 0 1 

我做了下面的腳本:

#!/usr/bin/python 

#Script to transpose a large file 

import os 
import sys 

with open(sys.argv[1],'r') as f: 
    m=[] 
    for line in f: 
     m.append(line.strip().split(" ")) 
    for row in zip(*m): 
    result = " ".join(row) 
    with open('transposed.txt','w') as output: 
     output.write(result) 

對於如何將此輸出保存到新文件,我有點失落。我可以這樣寫:

python script.py file_to_transpose.txt > transposed_file.txt 

但我想在腳本中找到一種方法。 預期的輸出是:

ID_1 SNP1 SNP2 SNP3 
S1 1 2 1 
S2 0 1 0 
S3 1 0 1 

但是,我現在的劇本只允許我看獲得最後一行

S3 1 0 1 
+0

後的預期結果 – RomanPerekhrest

+0

任何基本的Python教程將告訴你如何寫一個文件,請澄清你的問題是什麼。 – jonrsharpe

回答

1

寫入到一個文件中的通用的方式是這樣的:

with open('outputfile.txt', 'w') as output: 
    output.write('some string') 

如果你在腳本中這樣做,並用output.write(" ".join(row))代替最終的打印語句,那麼你應該得到結果,除非我誤解了y完全。

編輯:這個問題已經完全改變,可能基於我的答案的上述部分。我會嘗試在這裏回答新問題:

現在的問題是,每次寫入文件時都會重新打開該文件,這會創建一個新文件並擺脫舊文件。因此你只能打印最後一行。打開文件只一次和寫入了好幾次,像這樣:

#!/usr/bin/python 

#Script to transpose a large file 

import os 
import sys 

with open(sys.argv[1],'r') as f, open('transposed.txt','w') as output: 
    m=[] 
    for line in f: 
     m.append(line.strip().split(" ")) 
    for row in zip(*m): 
    result = " ".join(row) 
    output.write(result) 

如果你絕對需要打開該文件幾次(例如,如果你運行整個腳本幾次,需要繼續努力相同的輸出),追加模式,而不是寫模式打開:

with open('transposed.txt', 'a') as output: 
    output.write('This line will be appended at the end of the file\n') 
相關問題