Не удалось получить данные об использовании read() из StringIO в python

Использование версии Python2.7. Ниже приведен мой пример кода.

import StringIO
import sys

buff = StringIO.StringIO()
buff.write("hello")
print buff.read()

в приведенной выше программе read() ничего не возвращает мне, а getvalue() возвращает мне "привет". Может кто-нибудь помочь мне в решении проблемы? Мне нужно read(), потому что мой следующий код включает чтение "n" байтов.

2 ответа

Вам нужно сбросить позицию буфера в начало. Вы можете сделать это, выполнив buff.seek(0),

Каждый раз, когда вы читаете или записываете в буфер, позиция увеличивается на единицу. Допустим, вы начали с пустого буфера.

Значение буфера "", буфер pos есть 0, Ты сделаешь buff.write("hello"), Очевидно, что значение буфера сейчас hello, Положение буфера, однако, теперь 5, Когда вы звоните read()Прошло 5 позиций, чтобы прочитать! Таким образом, он возвращает пустую строку.

In [38]: out_2 = StringIO.StringIO('not use write') # be initialized to an existing string by passing the string to the constructor

In [39]: out_2.getvalue()
Out[39]: 'not use write'

In [40]: out_2.read()
Out[40]: 'not use write'

или же

In [5]: out = StringIO.StringIO()

In [6]: out.write('use write')

In [8]: out.seek(0)

In [9]: out.read()
Out[9]: 'use write'
Другие вопросы по тегам