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

时间:2014-07-08 23:25:10

标签: python file input output

所以我有这样的代码:

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

它确实生成了一个文件,但只有最后一个序列出现在文件中,发生了什么?

2 个答案:

答案 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