使用Python过滤fasta文件中记录\u id的序列

使用Python过滤fasta文件中记录\u id的序列,python,filtering,bioinformatics,biopython,Python,Filtering,Bioinformatics,Biopython,我有fastx_collapser输出,如下所示: >14-1677 GTGGCTTGTAGGCGATAAACATGATGCATTGCACCTGCCTGACGTTGTCG >15-1573 GGCAGAGAGAAGCATAAAACCTTCATACAAATTTAGTTATTCACCAAGTT >6265153-1 GTGTATATTTTCTATCATCCTCTTTCTTCCCATATCTTATGTCACTGTTG >6265154-1 GTCATCATCATACTCATCA

我有fastx_collapser输出,如下所示:

>14-1677
GTGGCTTGTAGGCGATAAACATGATGCATTGCACCTGCCTGACGTTGTCG
>15-1573
GGCAGAGAGAAGCATAAAACCTTCATACAAATTTAGTTATTCACCAAGTT
>6265153-1
GTGTATATTTTCTATCATCCTCTTTCTTCCCATATCTTATGTCACTGTTG
>6265154-1
GTCATCATCATACTCATCAGAATCCCAATATTCGTTTGGATATTCAAGCG
第一行表示每个序列的id>id和引用-引用。第二行表示每个读取的序列

我希望根据出现的次数过滤读取,我希望在输出文件中保留出现次数为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不同的引用,并且在输出文件2中没有任何内容。有人能帮我吗?

您正在声明id\u索引,但从未实际为其分配任何值,这将很困难,因为元组是不可变的

您的第一个文件始终为空,因为表达式id\u index==-1始终为False,而第二个文件获取所有条目,因为id\u index=-1永远是真的

将这些行更改为:

records = (r for r in SeqIO.parse(input_file, "fasta") if r.id.endswith('-1'))
分别。如果不是r。。。。。应该会给你想要的结果