使用Python过滤fasta文件中的record_id序列

时间:2015-10-26 16:44:36

标签: python filtering bioinformatics biopython

我有fastx_collapser输出,如下所示:

>14-1677
GTGGCTTGTAGGCGATAAACATGATGCATTGCACCTGCCTGACGTTGTCG
>15-1573
GGCAGAGAGAAGCATAAAACCTTCATACAAATTTAGTTATTCACCAAGTT
>6265153-1
GTGTATATTTTCTATCATCCTCTTTCTTCCCATATCTTATGTCACTGTTG
>6265154-1
GTCATCATCATACTCATCAGAATCCCAATATTCGTTTGGATATTCAAGCG

第一行代表每个序列的id(> id)和出现次数(-occurrences)。第二行是每次读取的序列。

我想基于事件过滤读取,我想在输出文件中维护出现1的所有读取,并在其他输出文件中保留所有剩余的读取。

我正在尝试这段代码:

from Bio import SeqIO
input_file = "prova.fasta"
output_file1 = "prova_filt_singl.fasta"
output_file2 = "prova_filt_Nosingl.fasta"
id_index = ("")

records = (r for r in SeqIO.parse(input_file, "fasta")if id_index=="-1" in r.id.upper())
count = SeqIO.write(records, output_file1, "fasta")

records = (r for r in SeqIO.parse(input_file, "fasta")if id_index!="-1" in r.id.upper())
count = SeqIO.write(records, output_file2, "fasta")

print("Saved %i records from %s to %s" % (count, input_file, output_file1))
print("Saved %i records from %s to %s" % (count, input_file, output_file2))

我有很多问题: 它还保持与1不同的事件,并且我在output_file2中没有任何内容。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

您宣布id_index但从未真正为其分配任何值,这很难,因为tuples是不可变的http://www.tutorialspoint.com/python/python_tuples.htm

您的第一个文件始终为空,因为表达式id_index=="-1"始终为False,而第二个文件会获取所有条目,因为id_index!="-1"始终为True

将这些行更改为:

records = (r for r in SeqIO.parse(input_file, "fasta") if r.id.endswith('-1'))

RESP。 if not r.....应该会给你想要的结果。