78

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

import StringIO
import sys

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

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

4

2 に答える 2

107

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

バッファに対して読み取りまたは書き込みを行うたびに、位置が1つ進みます。空のバッファから始めたとしましょう。

バッファ値は""、バッファ位置は0です。あなたはしますbuff.write("hello")。明らかに、バッファ値はになりhelloました。ただし、バッファ位置はになり5ました。あなたが電話するときread()、読むべき位置5を過ぎて何もありません!したがって、空の文字列を返します。

于 2012-04-22T06:00:35.503 に答える
26
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'
于 2015-07-28T23:55:52.743 に答える