# 5 `StringIO` -- ファイルのように文字列を読み書きする

このモジュールは、(メモリファイルとしても知られている) 文字列のバッファに対して読み書きを行うファイルのようなクラス、 `StringIO` 、を実装しています。

操作方法についてはファイルオブジェクトの説明を参照してください(セクション 3.9)。

クラス `StringIO`( | [buffer])

  `StringIO` オブジェクトを作る際に、コンストラクターに文字列を渡すこと で初期化することができます。 文字列を渡さない場合、最初は `StringIO` はカラです。 どちらの場合でも最初のファイル位置は 0 から始まります。

  `StringIO` オブジェクトはユニコードも 8-bit の文字列も受け付けますが、 この2つを混ぜることには少し注意が必要です。 この2つが一緒に使われると、 `getvalue()` が呼ばれたときに、 (8th ビットを使っている)7-bit ASCII に解釈できない 8-bit の文字列は、 `UnicodeError` を引き起こします。

次にあげる `StringIO` オブジェクトのメソッドには特別な説明が必要です:

`getvalue`( | )

  `StringIO` オブジェクトの `close()` メソッドが呼ばれる前ならいつでも、 ``file'' の中身全体を返します。 ユニコードと 8-bit の文字列を混ぜることの説明は、上の注意を参照してください。 この2つの文字コードを混ぜると、このメソッドは `UnicodeError` を 引き起こすかもしれません。

`close`( | )

  メモリバッファを解放します。

使用例:

    import StringIO

    output = StringIO.StringIO()
    output.write('First line.\n')
    print >>output, 'Second line.'

    # ファイルの内容を取り出す -- ここでは
    # 'First line.\nSecond line.\n'
    contents = output.getvalue()

    # オブジェクトを閉じてメモリバッファを解放する --
    # .getvalue() は例外を送出するようになる。
    output.close()