如何将Python生成的输出存储在txt文件中

0 投票
2 回答
1395 浏览
提问于 2025-04-18 12:34

我有一段这样的代码:

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 个回答

1

你可以选择用 write() 方法把内容写入一个打开的文件,或者把 stdout 重定向,这样通过 print 输出的所有内容都会写到一个文件里:

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

你也可以像Blender在评论中提到的那样,使用 > 将内容导入到一个文件中,不过这只有在你使用命令行而不是Python编辑器或IDLE时才适用。

在生产代码中,不建议随便替换 stdout,因为这样会全局生效,也就是说,其他函数的输出也会被写入到那个文件里。如果你真的要替换它,最好先保存原来的 sys.stdout

0

它只保存了最后一个序列,因为在每次循环时,它都会重新打开文件并覆盖之前的内容。你应该在循环之前就打开文件。

不过我建议使用写入或者打印“尖头”格式。也就是说:

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

撰写回答