Jupyter Notebook io.StringIO в качестве вывода - PullRequest
0 голосов
/ 04 апреля 2020

Вход

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

Выход

<_io.StringIO at 0x12a1a48>

Что такое _io.StringIO? и что это значит? То, что я ожидал, было какой-то строкой или массивом. Есть ли лучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 06 апреля 2020

Вы можете проанализировать дескриптор результатов, возвращенный из qblast() через модуль Bio.SearchIO, например,

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)

Это описано в моем недавнем учебнике по Bio python Jupyter Notebook .

Для нескольких результатов используйте SearchIO.parse(Blast_aa_mc, "blast-xml") (оберните list() вокруг него, чтобы создать список в памяти)

2 голосов
/ 04 апреля 2020

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 вернет пустой список.

...