如何将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编辑器或IDLE中打印出来。但我想生成一个文件,里面包含所有打印出来的内容。有人能帮我吗!
我的文件看起来是这样的:
101M : A : 序列 MVLSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRVKHLKTEAEMKASEDLKKHGVTVLTALGAILKKKGHHEAELKPLAQSHATKHKIPIKYLEFISEAIIHVLHSRHPGNFGADAQGAMNKALELFRKDIAAKYKELGYQG 101M : A : 二级结构 HHHHHHHHHHHHHHGGGHHHHHHHHHHHHHHH GGGGGG TTTTT SHHHHHH HHHHHHHHHHHHHHHHHHTTTT HHHHHHHHHHHHHTS HHHHHHHHHHHHHHHHHH GGG SHHHHHHHHHHHHHHHHHHHHHHHHTT
101M : A : 无序 ---------------------------------------------------------------------------------------------------------------------------------------------------------- 102L : A : 序列 MNIFEMLRIDEGLRLKIYKDTEGYYTIGIGHLLTKSPSLNAAAKSELDKAIGRNTNGVITKDEAEKLFNQDVDAAVRGILRNAKLKPVYDSLDAVRRAALINMVFQMGETGVAGFTNSLRMLQQKRWDEAAVNLAKSRWYNQTPNRAKRVITTFRTGTWDAYKNL 102L : A : 二级结构 HHHHHHHHH EEEEEE TTS EEEETTEEEESSS TTTHHHHHHHHHHTS TTB HHHHHHHHHHHHHHHHHHHHH TTHHHHHHHS HHHHHHHHHHHHHHHHHHHHT HHHHHHHHTT HHHHHHHHHSSHHHHHSHHHHHHHHHHHHHSSSGGG
102L : A : 无序 -------------------------------------------------------------------------------------------------------------------------------------------------------------------XX 102M : A : 序列 MVLSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRFKHLKTEAEMKASEDLKKAGVTVLTALGAILKKKGHHEAELKPLAQSHATKHKIPIKYLEFISEAIIHVLHSRHPGNFGADAQGAMNKALELFRKDIAAKYKELGYQG 102M : A : 二级结构 HHHHHHHHHHHHHHGGGHHHHHHHHHHHHHHH GGGGGG TTTTT SHHHHHH HHHHHHHHHHHHHHHHHHTTTT HHHHHHHHHHHHHTS HHHHHHHHHHHHHHHHHH TTT HHHHHHHHHHHHHHHHHHHHHHHHHT
102M : A : 无序 ---------------------------------------------------------------------------------------------------------------------------------------------------------- 103L : A : 序列 MNIFEMLRIDEGLRLKIYKDTEGYYTIGIGHLLTKSPSLNSLDAAKSELDKAIGRNTNGVITKDEAEKLFNQDVDAAVRGILRNAKLKPVYDSLDAVRRAALINMVFQMGETGVAGFTNSLRMLQQKRWDEAAVNLAKSRWYNQTPNRAKRVITTFRTGTWDAYKNL 103L : A : 二级结构 HHHHHHHHH EEEEEE TTS EEEETTEE HHHHHHHHHHHHTS TTB HHHHHHHHHHHHHHHHHHHHH TTTHHHHHHS HHHHHHHHHHHHHHHHHHHHT HHHHHHHHTT HHHHHHHHHSSHHHHHSHHHHHHHHHHHHHSSSGGG
103L : A : 无序 ----------------------------------XXXXXX-----------------------------------------------------------------------------------------------------------------------------XX
然后我添加了这段代码:
import sys
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
它确实生成了一个文件,但文件中只出现了最后一个序列,发生了什么事?
2 个回答
你可以选择用 write()
方法把内容写入一个打开的文件,或者把 stdout
重定向,这样通过 print
输出的所有内容都会写到一个文件里:
import sys
sys.stdout = open('outputfile', 'w')
print 'test' #'test' will be in the outputfile
你也可以像Blender在评论中提到的那样,使用 >
将内容导入到一个文件中,不过这只有在你使用命令行而不是Python编辑器或IDLE时才适用。
在生产代码中,不建议随便替换 stdout
,因为这样会全局生效,也就是说,其他函数的输出也会被写入到那个文件里。如果你真的要替换它,最好先保存原来的 sys.stdout
。
它只保存了最后一个序列,因为在每次循环时,它都会重新打开文件并覆盖之前的内容。你应该在循环之前就打开文件。
不过我建议使用写入或者打印“尖头”格式。也就是说:
f = open('outputfile', 'w')
for .....
print >>f,name, ' ', 'Sequence:',' ', Sequence,' ', 'Disorder:',' ', Disorder