Не удается получить данные при использовании функции read() из StringIO в python

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

import StringIO
import sys

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

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

Комментарии к вопросу (3)

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

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

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

Комментарии (0)
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'
Комментарии (1)