在python中,如何从文件中临时提取信息,并使用该信息操作同一文件

在python中,如何从文件中临时提取信息,并使用该信息操作同一文件,python,bioinformatics,biopython,Python,Bioinformatics,Biopython,所以我最近经常遇到这个问题。假设我有一个文本文件,我需要从中读取该文件,将一些值存储在列表中。接下来,我想使用该列表中的信息编辑另一个文件。 我一直在打开文件,在列表中存储变量,关闭文件。再次打开文件,运行实际分析,然后再次关闭文件。 我在想也许有更好的办法来解决这个问题。我在下面举了一个例子 一如既往,我将感谢您的帮助/建议 我有这个档案: >sctg_0002_0001 length=2745 TCCCCCTCCCGTACCGGTTTGCGCTATTATACCGGCCTTGAATCG

所以我最近经常遇到这个问题。假设我有一个文本文件,我需要从中读取该文件,将一些值存储在列表中。接下来,我想使用该列表中的信息编辑另一个文件。
我一直在打开文件,在列表中存储变量,关闭文件。再次打开文件,运行实际分析,然后再次关闭文件。
我在想也许有更好的办法来解决这个问题。我在下面举了一个例子

一如既往,我将感谢您的帮助/建议

我有这个档案:

>sctg_0002_0001  length=2745
TCCCCCTCCCGTACCGGTTTGCGCTATTATACCGGCCTTGAATCGAGCAAAGGCTCCAAACAATTTCATTACAAACAGATTGGGGATGTATGACGTGGCT
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
TTGACACGCTTGTTTCTGATGTCATCACCCATGAAGAGCTGTTATTTGGCCACCTGGCGTTCCTGCCTAAGCGTTGAGTGAATATTAAACACCTCTGCCC
>sctg_0003_0001  length=2175
CAACAACCACTCTTAGCGCTGCTTGCCGCTGCCGATACCGAACGGGATGCGGTAGTCGCTGCTCTGCTCACCCAGACTCACGGTCAGGTTGCCCTGAGTA
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
...
当我运行这个脚本时

from Bio import SeqIO
out=open("out.txt","a")
ID=[]
for record in SeqIO.parse("input.fas","fasta"):
    ID.append("_".join(str(record.id).rsplit("_")[1:])) #get the part following the ">"

n=1
for record in SeqIO.parse("input.fas","fasta"):
    if n==len(ID):
        #print >>out, n
        print >>out, "SEQUENCE_ID="+record.id+"e_"+ID[0]+"b"
        print >>out, "SEQUENCE_TEMPLATE ="+record.seq
        print >>out, "="
        n=n+1
        break
    else:
        #print >>out, n
        print >>out, "SEQUENCE_ID="+record.id+"e_"+ID[n]+"b"
        print >>out, "SEQUENCE_TEMPLATE ="+record.seq
        print >>out, "="
        n=n+1
out.close()
我得到了预期的输出,但我认为可能有更好的方法

SEQUENCE_ID=sctg_0002_0001e_0003_0001b
SEQUENCE_TEMPLATE =TCCCCCTCCCGTACCGGTTTGCGCTATTATACCGGCCTTGAATCGAGCAAAGGCTCCAAACAATTTCATTACAAACAGATTGGGGATGTATGACGTGGCTNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNTTGACACGCTTGTTTCTGATGTCATCACCCATGAAGAGCTGTTATTTGGCCACCTGGCGTTCCTGCCTAAGCGTTGAGTGAATATTAAACACCTCTGCCC
=
SEQUENCE_ID=sctg_0003_0001e_0004_0001b
SEQUENCE_TEMPLATE =CAACAACCACTCTTAGCGCTGCTTGCCGCTGCCGATACCGAACGGGATGCGGTAGTCGCTGCTCTGCTCACCCAGACTCACGGTCAGGTTGCCCTGAGTANNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
=
SEQUENCE_ID=sctg_0004_0001e_0005_0001b
SEQUENCE_TEMPLATE =CAACAACCACTCTTAGCGCTGCTTGCCGCTGCCGATACCGAACGGGATGCGGTAGTCGCTGCTCTGCTCACCCAGACTCACGGTCAGGTTGCCCTGAGTANNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
=
SEQUENCE_ID=sctg_0005_0001e_0002_0001b
SEQUENCE_TEMPLATE =CAACAACCACTCTTAGCGCTGCTTGCCGCTGCCGATACCGAACGGGATGCGGTAGTCGCTGCTCTGCTCACCCAGACTCACGGTCAGGTTGCCCTGAGTANNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
=

您可以在一个循环中完成所有处理,并避免使用列表
ID
。我认为它更干净:

from Bio import SeqIO
out = open("out.txt", "a")
records = list(SeqIO.parse("input.fas","fasta"))
previous = records[-1]
for record in records:
    id = "_".join(str(record.id).rsplit("_")[1:])
    out.write("SEQUENCE_ID=" + previous.id + "e_" + id + "b\n")
    out.write("SEQUENCE_TEMPLATE =%s\n=\n" % previous.seq)
    previous = record
out.close()

您可以在一个循环中完成所有处理,并避免使用列表
ID
。我认为它更干净:

from Bio import SeqIO
out = open("out.txt", "a")
records = list(SeqIO.parse("input.fas","fasta"))
previous = records[-1]
for record in records:
    id = "_".join(str(record.id).rsplit("_")[1:])
    out.write("SEQUENCE_ID=" + previous.id + "e_" + id + "b\n")
    out.write("SEQUENCE_TEMPLATE =%s\n=\n" % previous.seq)
    previous = record
out.close()

您正在使用的模块的文档解释了在“输入-多个记录”下您可以做什么——这是否回答了您的问题?您正在使用的模块的文档解释了在“输入-多个记录”下您可以做什么——这是否回答了您的问题?我以为会发生这种情况:previous=records[-1]TypeError:“generator”对象是unsubscriptable@Stylize是的,我已经更改了答案,所以现在应该不会有任何问题。我认为会发生这种情况:previous=records[-1]TypeError:“generator”对象是unsubscriptable@Stylize对我已经改变了答案,所以现在应该不会有任何问题了。