我有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中没有任何内容。任何人都可以帮助我吗?
答案 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.....
应该会给你想要的结果。