2014-07-08 55 views
0

所以我有這樣的代碼:如何在python生成的輸出保存在一個txt文件

disfile = open('filename.txt') 
for line in disfile: 
    list = line.split() 
    id = list[4] 
    if id == 'sequence': 
     name = list[0] 
     Sequence = list[5] 
    elif id == 'disorder': 
     Disorder = list[5] 
     print name, ' ', 'Sequence:',' ', Sequence,' ', 'Disorder:',' ', Disorder 

而這所有的數據和後序印刷在Python編輯器或閒置。但是我想生成一個包含所有已打印內容的文件。任何人都可以幫助我!

所以我的文件看起來像這樣:

101M:A:序列MVLSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRVKHLKTEAEMKASEDLKKHGVTVLTALGAILKKKGHHEAELKPLAQSHATKHKIPIKYLEFISEAIIHVLHSRHPGNFGADAQGAMNKALELFRKDIAAKYKELGYQG 101M:A:secstr HHHHHHHHHHHHHHGGGHHHHHHHHHHHHHHH GGGGGG TTTTT噓HHHHHHHHHHHHHHHHHHTTTT HHHHHHHHHHHHHTS HHHHHHHHHHHHHHHHHH GGG SHHHHHHHHHHHHHHHHHHHHHHHHTT
101M:A:障礙----- -------------------------------------------------- -------------------------------------------------- ------------------------------------------------- 102L:A:序列MNIFEMLRIDEGLR LKIYKDTEGYYTIGIGHLLTKSPSLNAAAKSELDKAIGRNTNGVITKDEAEKLFNQDVDAAVRGILRNAKLKPVYDSLDAVRRAALINMVFQMGETGVAGFTNSLRMLQQKRWDEAAVNLAKSRWYNQTPNRAKRVITTFRTGTWDAYKNL 102L:A:secstr HHHHHHHHH EEEEEE TTS EEEETTEEEESSS TTTHHHHHHHHHHTS TTB HHHHHHHHHHHHHHHHHHHHH TTHHHHHHHS HHHHHHHHHHHHHHHHHHHHT HHHHHHHHTT HHHHHHHHHSSHHHHHSHHHHHHHHHHHHHSSSGGG
102L:A:無序------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------- XX 102M:A:序列MVLSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRFKHLKTEAEMKASEDLKKAGVTVLTALGAILKKKGHHEAELKPLAQSHATKHKIPIKYLEFISEAIIHVLHSRHPGNFGADAQGAMNKALELFRKDIAAKYKELGYQG 102M:甲:secstr HHHHHHHHHHHHHHGGGHHHHHHHHHHHHHHH GGGGGG TTTTT SHHHHHH HHHHHHHHHHHHHHHHHHTTTT HHHHHHHHHHHHHTS HHHHHHHHHHHHHHHHHH TTT HHHHHHHHHHHHHHHHHHHH HHHHHT
102M:A:障礙------------------------------------------ -------------------------------------------------- -------------------------------------------------- ------------ 103L:A:序列MNIFEMLRIDEGLRLKIYKDTEGYYTIGIGHLLTKSPSLNSLDAAKSELDKAIGRNTNGVITKDEAEKLFNQDVDAAVRGILRNAKLKPVYDSLDAVRRAALINMVFQMGETGVAGFTNSLRMLQQKRWDEAAVNLAKSRWYNQTPNRAKRVITTFRTGTWDAYKNL 103L:A:secstr HHHHHHHHH EEEEEE TTS EEEETTEE HHHHHHHHHHHHTS TTB HHHHHHHHHHHHHHHHHHHHH TTTHHHHHHS HHHHHHHHHHHHHHHHHHHHT HHHHHHHHTT HHHHHHHHHSSHHHHHSHHHHHHHHHHHHHSSSGGG
103L:A:紊亂------- --------------------------- XXXXXX ---------------------- -------------------------------------------------- -------------------------------------------------- --- XX

後,我添加的代碼:

進口SYS sys.stdout的=打開( 'OUTPUTFILE', 'W') 打印 '測試' # '測試' 將在輸出文件

因此我的代碼變成:

disfile = open('filename.txt') 
for line in disfile: 
    list = line.split() 
    id = list[4] 
    if id == 'sequence': 
     name = list[0] 
     Sequence = list[5] 
    elif id == 'disorder': 
     Disorder = list[5] 
     import sys 
     sys.stdout = open('newfile.txt', 'w') 
     print name, ' ', 'Sequence:',' ', Sequence,' ', 'Disorder:',' ', Disorder 

它確實生成一個文件,但只有最後一個序列出現在該文件中,發生了什麼?

+2

用你的shell將其與你的文件一起放入一個文件:'python foo.py> file.txt'。 – Blender

回答

0

它只保存最後一個序列,因爲在每次迭代中它都會再次打開文件並覆蓋。你應該在循環之前打開它。

但我建議使用寫入或打印「雪佛龍」格式。即:

f = open('outputfile', 'w') 
for ..... 
    print >>f,name, ' ', 'Sequence:',' ', Sequence,' ', 'Disorder:',' ', Disorder 
1

您可以寫信給你打開使用write()或重定向stdout使通過print所有的輸出會去到一個文件一個文件:

import sys 
sys.stdout = open('outputfile', 'w') 
print 'test' #'test' will be in the outputfile 

也可通過管道進入提到過的一個文件作爲攪拌機但是,只有在您使用shell而不是Python編輯器或IDLE的情況下才適用。

替換stdout並不是應該在生產代碼中完成的,因爲它是全局替換的,即代碼外部的其他函數的輸出也會在文件中結束。如果您替換它,您可能需要保存原始sys.stdout

+0

替換'sys.stdout'不是一個好主意。你可以全局替換它。 – Blender

+0

@ user3817527,你多次分配給'sys.stdout'。嘗試在代碼開始時分配一次。沒有必要多次進行。每次你再次分配它時,你都會覆蓋原來在那個文件中的內容(因此只有* last *迭代的輸出出現)。 – sushain97

+0

@Blender,回答:) – sushain97

相關問題