【问题标题】:Jupyter Notebook io.StringIO as outputJupyter Notebook io.StringIO 作为输出
【发布时间】:2020-04-04 03:15:34
【问题描述】:
输入
Blast_aa_mc = qblast("blastp","nr", aa_mc[2])
Blast_aa_mc
输出
<_io.StringIO at 0x12a1a48>
什么是_io.StringIO?这是什么意思?我期待的是某种字符串或数组。有没有更好的方法来做到这一点?
【问题讨论】:
标签:
python
jupyter-notebook
bioinformatics
biopython
stringio
【解决方案1】:
您可以通过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() 包裹起来以在内存中创建一个列表)
【解决方案2】:
StringIO 是标准库中 Python 的 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 将返回一个空列表。