Python 使用for循环从blast下载结果
我试图从列表中的不同序列中获得结果,因此下面是我的代码:Python 使用for循环从blast下载结果,python,bioinformatics,biopython,Python,Bioinformatics,Biopython,我试图从列表中的不同序列中获得结果,因此下面是我的代码: from Bio.Blast import NCBIXML from Bio.Blast import NCBIWWW lst=['TGCCCCGAAAATGAACTCAGTAAAGAATGACAGTTTCGCAAGACCCGTTGCTTTTTCAGTGCTAGCTAGCTGACTGATCGTAGCTGACGTAGTCTAGCTAGC','ATCGATCGTACTACGTAGCTGATCGTAGCTAGCTAGCTGATCGTAGCT
from Bio.Blast import NCBIXML
from Bio.Blast import NCBIWWW
lst=['TGCCCCGAAAATGAACTCAGTAAAGAATGACAGTTTCGCAAGACCCGTTGCTTTTTCAGTGCTAGCTAGCTGACTGATCGTAGCTGACGTAGTCTAGCTAGC','ATCGATCGTACTACGTAGCTGATCGTAGCTAGCTAGCTGATCGTAGCTATCGTACGTAGCTGATCGATCGTAGCTGACTGACGTACGTAGCTGATCGTAGCTAGCTAGCTAGCTGATCGATC']
eq="Homo sapiens[Organism]"
for i in range(0,2):
rslt = NCBIWWW.qblast("blastn", "nr", lst[i],entrez_query=eq)
rcrds = NCBIXML.parse(rslt)
br = rcrds.next()
for alignment in br.alignments:
for hsp in alignment.hsps:
if hsp.expect < 2:
print "***** RECORD ****"+str(i)
print "sequence:", alignment.title
print "E-value:", hsp.expect
任何帮助都将不胜感激。嗯……您的代码是正确的!。。。但您正在搜索不存在的数据。。。 问题是,如果br.alignments为空,则可能没有输出…(secont lst条目就是这种情况) 看看这个剪下来的:
from Bio.Blast import NCBIXML
from Bio.Blast import NCBIWWW
lst=['TGCCCCGAAAATGAACTCAGTAAAGAATGACAGTTTCGCAAGACCCGTTGCTTTTTCAGTGCTAGCTAGCTGACTGATCGTAGCTGACGTAGTCTAGCTAGC','ATCGATCGTACTACGTAGCTGATCGTAGCTAGCTAGCTGATCGTAGCTATCGTACGTAGCTGATCGATCGTAGCTGACTGACGTACGTAGCTGATCGTAGCTAGCTAGCTAGCTGATCGATC']
eq="Homo sapiens[Organism]"
# download with lst[1]
print "download start"
rslt = NCBIWWW.qblast("blastn", "nr", lst[1],entrez_query=eq)
print "download end"
print "parsing start"
rcrds = NCBIXML.parse(rslt)
print "parsing end"
br = rcrds.next()
print "br.alignments"
print br.alignments
您可以尝试对lst[0]进行相同的剪切,结果将是以下输出:
>>> br.alignments
[<Bio.Blast.Record.Alignment object at 0x02ACCF90>, <Bio.Blast.Record.Alignment object at 0x02ACCE50>, <Bio.Blast.Record.Alignment object at 0x02ACCCF0>, <Bio.Blast.Record.Alignment object at 0x02ACCE10>, <Bio.Blast.Record.Alignment object at 0x02ACCCD0>, <Bio.Blast.Record.Alignment object at 0x02ACCBF0>, <Bio.Blast.Record.Alignment object at 0x02ACCD70>, <Bio.Blast.Record.Alignment object at 0x02ACC930>, <Bio.Blast.Record.Alignment object at 0x02ACC9B0>, <Bio.Blast.Record.Alignment object at 0x02ACCA90>, <Bio.Blast.Record.Alignment object at 0x02ACCAD0>, <Bio.Blast.Record.Alignment object at 0x02ACCB90>, <Bio.Blast.Record.Alignment object at 0x02ACC850>, <Bio.Blast.Record.Alignment object at 0x02ACC970>]
>>br.对齐
[, , , , , , , ]
因此短版本是:
输出仅提供str(i)=0的爆炸记录,因为i=1没有数据!
如果要查看i=0的所有条目,必须删除行“hsp.expect<2”强>
我希望这能有所帮助我以前单独做过,但结果是我没有按照相同的顺序做。我现在可以自杀,因为这个小小的错误花费了我的时间,让我崩溃,因为我确信我的代码是正确的:)非常感谢你的时间:)总是有这些小事情。。。。这花费了永恒的时间:)哈哈:)不客气请将问题标记为“已回答”
from Bio.Blast import NCBIXML
from Bio.Blast import NCBIWWW
lst=['TGCCCCGAAAATGAACTCAGTAAAGAATGACAGTTTCGCAAGACCCGTTGCTTTTTCAGTGCTAGCTAGCTGACTGATCGTAGCTGACGTAGTCTAGCTAGC','ATCGATCGTACTACGTAGCTGATCGTAGCTAGCTAGCTGATCGTAGCTATCGTACGTAGCTGATCGATCGTAGCTGACTGACGTACGTAGCTGATCGTAGCTAGCTAGCTAGCTGATCGATC']
eq="Homo sapiens[Organism]"
# download with lst[1]
print "download start"
rslt = NCBIWWW.qblast("blastn", "nr", lst[1],entrez_query=eq)
print "download end"
print "parsing start"
rcrds = NCBIXML.parse(rslt)
print "parsing end"
br = rcrds.next()
print "br.alignments"
print br.alignments
>>> br.alignments
[<Bio.Blast.Record.Alignment object at 0x02ACCF90>, <Bio.Blast.Record.Alignment object at 0x02ACCE50>, <Bio.Blast.Record.Alignment object at 0x02ACCCF0>, <Bio.Blast.Record.Alignment object at 0x02ACCE10>, <Bio.Blast.Record.Alignment object at 0x02ACCCD0>, <Bio.Blast.Record.Alignment object at 0x02ACCBF0>, <Bio.Blast.Record.Alignment object at 0x02ACCD70>, <Bio.Blast.Record.Alignment object at 0x02ACC930>, <Bio.Blast.Record.Alignment object at 0x02ACC9B0>, <Bio.Blast.Record.Alignment object at 0x02ACCA90>, <Bio.Blast.Record.Alignment object at 0x02ACCAD0>, <Bio.Blast.Record.Alignment object at 0x02ACCB90>, <Bio.Blast.Record.Alignment object at 0x02ACC850>, <Bio.Blast.Record.Alignment object at 0x02ACC970>]