BytesIO с Python v2.5

Вопрос:

Как мне получить поток байтов, который работает как StringIO для Python 2.5?

Приложение:

Я конвертирую PDF в текст, но не хочу сохранять файл на жесткий диск.

Другие мысли:

Я подумал, что могу использовать StringIO, но там нет параметра режима (я думаю, «String» подразумевает текстовый режим).

По-видимому, класс io.BytesIO является новым в версии 2.6, так что у меня он тоже не работает.

У меня есть решение с модулем tempfile, но я хотел бы избежать каких-либо операций чтения/записи на/с жесткого диска.


person tgray    schedule 14.08.2009    source источник


Ответы (2)


В Python 2.x «строка» означает «байты», а «юникод» означает «строка». Вы должны использовать модули StringIO или cStringIO. Режим будет зависеть от того, какие данные вы передаете в качестве параметра буфера.

person John Millikin    schedule 14.08.2009
comment
Спасибо, я чувствую себя немного умственно отсталым в данный момент. :-П - person tgray; 14.08.2009
comment
Вы знаете, почему в 2.6 есть отдельный BytesIO, если StringIO делает то же самое? - person tgray; 14.08.2009
comment
Прямая совместимость — версия 2.6 предназначена для облегчения перехода на версию 3.0, поэтому некоторые функции версии 3.0 (например, модуль io) были перенесены. - person John Millikin; 14.08.2009
comment
так from cStringIO import StringIO as BytesIO на ‹2.6 эквивалентно from io import BytesIO? - person Mike T; 06.07.2011

Если вы работаете с PDF, то StringIO должно быть хорошо, если вы обращаете внимание на документы:

Объект StringIO может принимать как Unicode, так и 8-битные строки, но их смешивание может потребовать некоторой осторожности. Если оба используются, 8-битные строки, которые не могут быть интерпретированы как 7-битные ASCII (использующие 8-й бит), вызовут UnicodeError при вызове getvalue().

Обратите внимание, что это не верно для cStringIO:

В отличие от файлов памяти, реализованных модулем StringIO, файлы, предоставляемые этим модулем, не могут принимать строки Unicode, которые нельзя закодировать как простые строки ASCII.

См. полную документацию по адресу:

person ars    schedule 14.08.2009