Python:如何根据序列基而不是它们的头名称除去序列?

2024-06-25 23:15:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我想根据序列成分来推导两个文件,而不是使用头文件名来删除序列。有没有其他方法可以让我推断出顺序?有人能帮我吗?如果下面的fasta头被>;human替换,则以下代码将无法运行。你知道吗

代码

from Bio import SeqIO

input_file = 'a.fasta'
merge_file = 'original.fasta'
output_file = 'results.fasta'
exclude = set()
fasta_sequences = SeqIO.parse(open(input_file),'fasta')
for fasta in fasta_sequences:
    exclude.add(fasta.id)

fasta_sequences = SeqIO.parse(open(merge_file),'fasta')
with open(output_file, 'w') as output_handle:
   for fasta in fasta_sequences:
        if fasta.id not in exclude:
            SeqIO.write([fasta], output_handle, "fasta")

法斯塔

>chr12:15747942-15747949
TGACATCA
>chr2:130918058-130918065
TGACCTCA

原版.fasta

>chr3:99679938-99679945
TGACGTAA
>chr9:135822160-135822167
TGACCTCA
>chr12:15747942-15747949
TGACATCA
>chr2:130918058-130918065
TGACCTCA
>chr2:38430457-38430464
TGACCTCA
>chr1:112381724-112381731
TGACATCA

结果.fasta

>chr3:99679938-99679945
TGACGTAA
>chr9:135822160-135822167
TGACCTCA
>chr2:38430457-38430464
TGACCTCA
>chr1:112381724-112381731
TGACATCA

Tags: 代码ininputoutput序列openmergeexclude
1条回答
网友
1楼 · 发布于 2024-06-25 23:15:22

你可以互相核对顺序。但是要小心,这些序列可能不是100%匹配的,并且它们必须是这个方法所需要的结果。使用str(your_obj.seq)访问序列。你知道吗

在代码中,实现以下更改:

for fasta in fasta_sequences:
    exclude.add(str(fasta.seq))

在这里:

for fasta in fasta_sequences:
        if str(fasta.seq) not in exclude:

在您的示例中,您应该注意,results.fasta文件将只包含以下行,因为它是original.fasta中唯一与a.fasta中的序列不匹配的序列。你知道吗

>chr3:99679938-99679945
TGACGTAA

相关问题 更多 >