Python: 如何根据序列碱基而不是它们的 header 名称去除序列?
Python: How to get rid of the sequences according to the sequence bases rather than their header name?
我想根据序列成分扣除两个文件,而不是使用 header 名称来删除序列。还有其他方法可以扣除序列吗?谁能帮我?如果下面的 fasta header 被替换为 >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")
a.fasta
>chr12:15747942-15747949
TGACATCA
>chr2:130918058-130918065
TGACCTCA
original.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
results.fasta
>chr3:99679938-99679945
TGACGTAA
>chr9:135822160-135822167
TGACCTCA
>chr2:38430457-38430464
TGACCTCA
>chr1:112381724-112381731
TGACATCA
您可以相互核对序列。不过要小心,序列可能不是 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
中唯一与 [=16= 中的序列不匹配的序列].
>chr3:99679938-99679945
TGACGTAA
我想根据序列成分扣除两个文件,而不是使用 header 名称来删除序列。还有其他方法可以扣除序列吗?谁能帮我?如果下面的 fasta header 被替换为 >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")
a.fasta
>chr12:15747942-15747949
TGACATCA
>chr2:130918058-130918065
TGACCTCA
original.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
results.fasta
>chr3:99679938-99679945
TGACGTAA
>chr9:135822160-135822167
TGACCTCA
>chr2:38430457-38430464
TGACCTCA
>chr1:112381724-112381731
TGACATCA
您可以相互核对序列。不过要小心,序列可能不是 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
中唯一与 [=16= 中的序列不匹配的序列].
>chr3:99679938-99679945
TGACGTAA