7.5. StringIO --- ファイルのように文字列を読み書きする¶
このモジュールは、(メモリファイル としても知られている) 文字列のバッファに対して読み書きを行うファイルのようなクラス、 StringIO を実装しています。
操作方法についてはファイルオブジェクトの説明を参照してください (ファイルオブジェクト )。
(通常の文字列については str と unicode を参照してください)
-
class
StringIO.StringIO([buffer])¶ StringIOオブジェクトを作る際に、コンストラクタに文字列を渡してオブジェクトを初期化できます。 文字列を渡さない場合、最初はStringIOは空です。 どちらの場合でも最初のファイル位置は 0 から始まります。StringIOオブジェクトは Unicode も 8 ビットの文字列も受け付けますが、この 2 つを混ぜることには少し注意が必要です。 この 2 つが一緒に使われると、 (8 ビット目を使っていて) 7-bit ASCII として解釈できない 8-bit の文字列は、getvalue()が呼ばれたときにUnicodeErrorを引き起こします。
次にあげる StringIO オブジェクトのメソッドには特別な説明が必要です:
-
StringIO.getvalue()¶ StringIOオブジェクトのclose()メソッドが呼ばれる前ならいつでも、 "file" の中身全体を返します。 Unicode と 8 ビット文字列を混ぜることの説明は、上の注意を参照してください; この 2 つの文字コードを混ぜると、このメソッドはUnicodeErrorを引き起こす可能性があります。
-
StringIO.close()¶ メモリバッファを解放します。 close された後の
StringIOオブジェクトを操作しようとするとValueErrorが送出されます。
使い方の例:
import StringIO
output = StringIO.StringIO()
output.write('First line.\n')
print >>output, 'Second line.'
# Retrieve file contents -- this will be
# 'First line.\nSecond line.\n'
contents = output.getvalue()
# Close object and discard memory buffer --
# .getvalue() will now raise an exception.
output.close()
7.6. cStringIO --- 高速化された StringIO¶
cStringIO モジュールは StringIO モジュールと同様のインターフェースを提供しています。 StringIO.StringIO オブジェクトを酷使する場合、このモジュールにある StringIO() 関数をかわりに使うと効果的です。
-
cStringIO.StringIO([s])¶ 読み書きのための StringIO 類似ストリームを返します。
組み込み型オブジェクトを返す factory 関数なので、サブクラス化して独自の関数を組むことはできません。属性の追加もできません。これらをするにはオリジナルの
StringIOモジュールを使ってください。StringIOモジュールとは異なり、このモジュールで提供されているものは、プレイン ASCII 文字列にエンコードできない Unicode を受け付けることができません。もう一つ違いがあります。引数に文字列を指定して
StringIO()呼び出すと読み出し専用のオブジェクトが生成されますが、これの場合cStringIO.StringIO()では write()メソッドを持たないオブジェクトを生成します。これらのオブジェクトは普段は見えません。トレースバックにStringIとStringOとして表示されます。
次にあげるデータオブジェクトも提供されています:
-
cStringIO.InputType¶ 文字列をパラメーターに渡して
StringIO()を呼ぶことで作られるオブジェクトのオブジェクト型。
-
cStringIO.OutputType¶ パラメーターを渡さずに
StringIO()を呼ぶことで返されるオブジェクトのオブジェクト型。
このモジュールには C API もあります。詳しくはこのモジュールのソースを参照してください。
使い方の例:
import cStringIO
output = cStringIO.StringIO()
output.write('First line.\n')
print >>output, 'Second line.'
# Retrieve file contents -- this will be
# 'First line.\nSecond line.\n'
contents = output.getvalue()
# Close object and discard memory buffer --
# .getvalue() will now raise an exception.
output.close()
