使用Biopython更改fasta文件中的DNA序列

使用Biopython更改fasta文件中的DNA序列,python,biopython,fasta,Python,Biopython,Fasta,我有一个fasta格式的文件,里面有几个DNA序列。我想将每个序列的内容更改为另一个较小的序列,保持相同的序列id。 新序列在列表中 with open("outfile.fa", "w") as f: for seq_record in SeqIO.parse("ma-all-mito.fa", "fasta"): for i in range(len(newSequences_ok)): f.write(str(seq_record.id[i]

我有一个fasta格式的文件,里面有几个DNA序列。我想将每个序列的内容更改为另一个较小的序列,保持相同的序列id。 新序列在列表中

with open("outfile.fa", "w") as f:
    for seq_record in SeqIO.parse("ma-all-mito.fa", "fasta"):
        for i in range(len(newSequences_ok)):
            f.write(str(seq_record.id[i]) + "\n")
            f.write(str(newSequences_ok[i]) + "\n")  
但我得到:

IndexError: string index out of range
我如何更改代码使其工作?我认为问题在于,我需要遍历原始的fasta文件和包含新序列的列表

原始fasta文件如下所示:

>Sequence1
ATGATGCATGG
>Sequence2
TTTTGGGAATC
>Sequence3
GGGCTAACTAC
>Sequence4
ATCTCAGGAA
新序列的列表与此类似:

newSequences_ok=[ATGG,TTTC,GGTA,CTCG]
我希望得到的输出是:

>Sequence1
ATGG
>Sequence2
TTTC
>Sequence3
GGTA
>Sequence4
CTCG
我认为这可能有效:


如果没有(即使有)——你真的需要仔细阅读工作原理。您将
SeqIO.parse
视为直接返回文件行的东西。相反,它返回具有
seq
属性的
seq
对象,该属性返回本身具有两个属性的
seq
对象,一个
seq
属性(这似乎是您想要的)和一个
alphabet
属性。在尝试修改之前,您应该集中精力提取您感兴趣的信息。

您还有待解决的问题:还有,什么是
newSequences\u ok
?请提供有关您的数据结构的更多信息。如果您在不使用BioPyton的情况下创建一个最小的工作示例(包括所有
导入
等),这将是最简单的。顺便说一句:你使用哪一版本的BioPython?newSequences_ok是一个列表,其中包含每个记录的新序列字符串。这是我想要的fasta文件,而不是之前的序列。我使用Biopython 1.68它给出了以下错误:TypeError:“generator”对象不是subscriptable@newa123立即重试另一个错误:TypeError:write()参数必须是str,而不是SeqRecord@newa123然后再次添加
str
(如编辑中所示)。我不确定这一点。再说一次:索引器:列表索引超出范围。也许我以前的代码有错
records = SeqIO.parse("ma-all-mito.fa", "fasta")
with open("outfile.fa", "w") as f:
    for r, s in zip(records,newSequences_ok):
        f.write(r.seq.seq.split('\n')[0] + '\n')
        f.write(s + '\n')