所以我有这样的代码:
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编辑器或IDLE中打印出来。但我想生成一个包含所有已打印内容的文件。任何人都可以帮助我!
所以我的文件看起来像这样:
101M:A:序列MVLSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRVKHLKTEAEMKASEDLKKHGVTVLTALGAILKKKGHHEAELKPLAQSHATKHKIPIKYLEFISEAIIHVLHSRHPGNFGADAQGAMNKALELFRKDIAAKYKELGYQG 101M:A:secstr HHHHHHHHHHHHHHGGGHHHHHHHHHHHHHHH GGGGGG TTTTT嘘HHHHHHHHHHHHHHHHHHTTTT HHHHHHHHHHHHHTS HHHHHHHHHHHHHHHHHH GGG SHHHHHHHHHHHHHHHHHHHHHHHHTT
101M:A:混乱--------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------- 102L:A:序列MNIFEMLRIDEGLRLKIYKDTEGYYTIGIGHLLTKSPSLNAAAKSELDKAIGRNTNGVITKDEAEKLFNQDVDAAVRGILRNAKLKPVYDSLDAVRRAALINMVFQMGETGVAGFTNSLRMLQQKRWDEAAVNLAKSRWYNQTPNRAKRVITTFRTGTWDAYKNL 102L:A:secstr HHHHHHHHH EEEEEE TTS EEEETTEEEESSS TTTHHHHHHHHHHTS TTB HHHHHHHHHHHHHHHHHHHHH TTHHHHHHHS HHHHHHHHHHHHHHHHHHHHT HHHHHHHHTT HHHHHHHHHSSHHHHHSHHHHHHHHHHHHHSSSGGG
102L:A:无效--------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------ XX 102M:A:序列MVLSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRFKHLKTEAEMKASEDLKKAGVTVLTALGAILKKKGHHEAELKPLAQSHATKHKIPIKYLEFISEAIIHVLHSRHPGNFGADAQGAMNKALELFRKDIAAKYKELGYQG 102M:A:secstr HHHHHHHHHHHHHHGGGHHHHHHHHHHHHHHH GGGGGG TTTTT嘘HHHHHHHHHHHHHHHHHHTTTT HHHHHHHHHHHHHTS HHHHHHHHHHHHHHHHHH TTT HHHHHHHHHHHHHHHHHHHHHHHHHT
102M:A:混乱--------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------- 103L:A:序列MNIFEMLRIDEGLRLKIYKDTEGYYTIGIGHLLTKSPSLNSLDAAKSELDKAIGRNTNGVITKDEAEKLFNQDVDAAVRGILRNAKLKPVYDSLDAVRRAALINMVFQMGETGVAGFTNSLRMLQQKRWDEAAVNLAKSRWYNQTPNRAKRVITTFRTGTWDAYKNL 103L:A:secstr HHHHHHHHH EEEEEE TTS EEEETTEE HHHHHHHHHHHHTS TTB HHHHHHHHHHHHHHHHHHHHH TTTHHHHHHS HHHHHHHHHHHHHHHHHHHHT HHHHHHHHTT HHHHHHHHHSSHHHHHSHHHHHHHHHHHHHSSSGGG
103L:A:无序---------------------------------- XXXXXX ---------- -------------------------------------------------- -------------------------------------------------- --------------- XX
在我添加代码之后:
导入系统 sys.stdout = open('outputfile','w') print'test'#'test'将出现在输出文件中
因此我的代码变为:
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
它确实生成了一个文件,但只有最后一个序列出现在文件中,发生了什么?
答案 0 :(得分:1)
您可以使用write()
写入您打开的文件,也可以重定向stdout
,以便通过print
输出的所有文件都会转到文件中:
import sys
sys.stdout = open('outputfile', 'w')
print 'test' #'test' will be in the outputfile
你也可以像使用>
在评论中提到的Blender一样输入文件,但这只适用于你使用shell而不是你提到的Python编辑器或IDLE。
替换stdout
不是应该在生产代码中完成的,因为它被全局替换,即代码外部的其他函数的输出也将在文件中结束。如果您要替换它,可能需要保存原始sys.stdout
。
答案 1 :(得分:0)
它只保存最后一个序列,因为在每次迭代时它再次打开文件并覆盖。你应该在循环之前打开它。
但我建议使用写作或打印" chevron"格式。即:
f = open('outputfile', 'w')
for .....
print >>f,name, ' ', 'Sequence:',' ', Sequence,' ', 'Disorder:',' ', Disorder