我有一个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
答案 0 :(得分:1)
我认为可能会工作:
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')
如果没有(即使它确实如此) - 你真的需要阅读Biopython的工作原理。您将SeqIO.parse
视为直接返回文件行的内容。相反,它返回SeqRecord
个具有seq
属性的对象,这些对象返回Seq
个对象,这些对象本身有两个属性,一个seq
属性(这是你想要的)和一个alphabet
属性。在尝试修改之前,您应该专注于能够提取您感兴趣的信息。