【问题标题】:Blast without creating any file using biopython使用 biopython 在不创建任何文件的情况下进行爆炸
【发布时间】:2017-01-10 11:14:35
【问题描述】:

我有一个工作代码,它在 ncbi 服务器上执行 BLAST,然后以 xml 格式返回序列。它正在工作,但我想避免制作新文件并直接在终端上打印 BLAST 结果。有没有一个好的解决方案来做到这一点?我粘贴在我的代码下面,它正在工作,但它正在创建一个新文件。

result_handle = NCBIWWW.qblast(
"blastx",
"nr",
sequences,
entrez_query = organism)

save_file = open("BLAST.xml", "w")
save_file.write(result_handle.read())
save_file.close()

result_handle.close()

result = open("BLAST.xml", "r")
records = NCBIXML.parse(result)

for i, record in enumerate(records):
    if record.alignments == []:
        print ("There is no BLAST result")
    else:
        for align in record.alignments:
            print (align.hit_id)
            break

我想做这样的事情:

result = result_handle.read()
record = NCBIXML.parse(result)
for i, record in enumerate(record):

但它不起作用。

提前谢谢你!

【问题讨论】:

  • “它不工作” 不是有效的问题陈述。请edit您的问题并准确解释发生了什么,包括任何错误或回溯的全文。另外,请确保您的示例代码是任何人都可以运行的minimal reproducible example,并且不依赖于先前定义的变量,例如sequencesorganism。您的导入语句也应该包括在内。

标签: python xml file biopython blast


【解决方案1】:

我认为解决方案应该比您希望的更简单:

result_handle = NCBIWWW.qblast("blastx", "nr", sequences, entrez_query=organism)

records = NCBIXML.parse(result_handle)

for i, record in enumerate(records):
    if record.alignments:
        for align in record.alignments:
            print(align.hit_id)
    else:
        print("There is no BLAST result for", i)

NCBIWWW.qblast() 的结果是StringIO 输入流的句柄,您可以直接将其交给NCBIXML.parse()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多