2012-04-22 22 views
53

Python2.7バージョンを使用しています。以下は私のサンプルコードです。PythonでStringIOのread()を使用してデータを取得できません

上記のプログラムでは、read()はgetvalue()が私に "hello"を返しても何も返しません。問題を解決するのに誰も助けてくれますか?次のコードは "n"バイトの読み込みを伴うため、read()が必要です。

+0

'(読みという名前の関数がありません)'で[StringIOを](http://docs.python.org/library/stringio.html#module-StringIO) – hjpotter92

+0

@ ChasingDeath:そうです。 'dir(StringIO.StringIO)'を試してください。 –

+2

yeah StringIOは、文字列のオブジェクトのようなファイルを作成します。もちろん、read @) – jamylak

答えて

77

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

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

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

11
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' 
+0

out.seek(0)は、PickIOをStringIOにダンプしてs3にアップロードしようとしたときに欠けていたものです。いったん私が最初にプッシュバックすると、私のs3オブジェクトは適切に配置されます。 – Matthew

関連する問題