Не удалось получить данные при использовании read() для StringIO в python
Использование версии Python2.7. Ниже приведен пример кода.
import StringIO
import sys
buff = StringIO.StringIO()
buff.write("hello")
print buff.read()
в вышеуказанной программе, read() возвращает мне ничего, где getvalue() возвращает мне "привет". Может ли кто-нибудь помочь мне в решении проблемы? Мне нужно read(), потому что мой следующий код включает чтение "n" байтов.
Ответы
Ответ 1
Вам нужно reset положение буфера до начала. Вы можете сделать это, выполнив buff.seek(0)
.
Каждый раз, когда вы читаете или записываете в буфер, позиция продвигается на один. Скажем, вы начинаете с пустого буфера.
Значение буфера ""
, буфер pos - 0
.
Вы делаете buff.write("hello")
. Очевидно, значение буфера теперь hello
. Однако положение буфера теперь 5
. Когда вы вызываете read()
, нет ничего предыдущего положения 5 для чтения! Таким образом, он возвращает пустую строку.
Ответ 2
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'