web-dev-qa-db-ja.com

pythonでStringIOのread()を使用してデータを取得できない

Python2.7バージョンを使用します。以下は私のサンプルコードです。

import StringIO
import sys

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

上記のプログラムでは、getvalue()が「hello」を返すのに対して、read()は何も返しません。誰でも問題を解決するのに役立ちますか?私の次のコードは「n」バイトの読み取りを伴うため、read()が必要です。

64
raj

バッファの位置を先頭にリセットする必要があります。これを行うには、buff.seek(0)を実行します。

バッファを読み書きするたびに、位置が1つ進められます。空のバッファーで開始するとします。

バッファーの値は_""_、バッファーの位置は_0_です。 buff.write("hello")を実行します。バッファ値は明らかにhelloです。ただし、バッファの位置は_5_になりました。 read()を呼び出すと、位置5を超えて読み取ることはありません!したがって、空の文字列を返します。

90
Joel Cornett
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'
19
Vincent Lee