Не удалось получить данные об использовании 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'