Jupyter Notebook io.StringIO 作为输出

Jupyter Notebook io.StringIO as output

输入

Blast_aa_mc = qblast("blastp","nr", aa_mc[2])
Blast_aa_mc

输出

<_io.StringIO at 0x12a1a48>

什么是_io.StringIO?这是什么意思?我所期待的是某种字符串或数组。有更好的方法吗?

StringIO is a class from Python's io 标准库中的模块。 本质上,StringIO 对象的行为类似于 Python 不存储在磁盘上但保存在内存中的文件对象。

让我们看一个简单的例子:

f = io.StringIO("Some initial\ntext data.")

如果你把它打印出来,你会得到类似于你的结果:

print(f)

>> <_io.StringIO object at 0x7f4530264a68>

如何处理?好吧,几乎任何你能用文件对象做的事情,你都可以用 StringIO 对象来做。例如获取 f:

中所有行的列表
    content = f.readlines()
    print(content)

    >> ['Some initial\n', 'text data.']

并获取包含所有内容的单个字符串:

print(''.join(content))

>> 'Some initial
text data.'

请注意,您只能调用一次 readlines - 就像文件一样。第二次调用 readlines 将 return 一个空列表。

您可以通过 Bio.SearchIO 模块解析从 qblast() 返回的结果句柄,例如

from Bio import SearchIO
from Bio.Blast import NCBIWWW

Blast_aa_mc = NCBIWWW.qblast("blastp","nr", aa_mc[2])
blast_qresult = SearchIO.read(Blast_aa_mc, "blast-xml")
print(blast_qresult)

这在我最近的 Biopython Jupyter Notebook tutorial 中有所介绍。

对于多个结果,使用 SearchIO.parse(Blast_aa_mc, "blast-xml")(环绕 list() 以在内存中创建一个列表)