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

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

import StringIO
import sys

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

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


person raj    schedule 22.04.2012    source источник
comment
в stringIO нет функции с именем read()   -  person hjpotter92    schedule 22.04.2012
comment
@ChasingDeath: Да, есть. Попробуйте dir(StringIO.StringIO).   -  person Joel Cornett    schedule 22.04.2012
comment
да, StringIO создает файл как объект для строк, поэтому, конечно, будет read()   -  person jamylak    schedule 22.04.2012


Ответы (2)


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

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

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

person Joel Cornett    schedule 22.04.2012

person    schedule
comment
out.seek(0) — это то, чего мне не хватало, когда я пытался сбросить рассол в StringIO и загрузить его в s3. Как только я вернусь к началу, мой объект s3 будет правильно заполнен. - person Matthew; 17.11.2017