7.5。 StringIO —文字列をファイルとして読み書きします
このモジュールは、文字列バッファ(メモリファイルとも呼ばれます)の読み取りと書き込みを行うファイルのようなクラス StringIO を実装します。 操作については、ファイルオブジェクトの説明を参照してください(セクションファイルオブジェクト)。 (標準の文字列については、 str および unicode を参照してください。)
- class StringIO.StringIO([buffer])
StringIO オブジェクトが作成されると、その文字列をコンストラクターに渡すことで、既存の文字列に初期化できます。 文字列が指定されていない場合、 StringIO は空で始まります。 どちらの場合も、ファイルの初期位置はゼロから始まります。
StringIO オブジェクトは、Unicodeまたは8ビットの文字列を受け入れることができますが、2つを混合することには注意が必要です。 両方を使用する場合、7ビットASCIIとして解釈できない8ビット文字列(8番目のビットを使用)により、 getvalue()が呼び出されたときに
UnicodeError
が発生します。
StringIO オブジェクトの次のメソッドには、特別な言及が必要です。
- StringIO.getvalue()
- StringIO オブジェクトの close()メソッドが呼び出される前であれば、いつでも「ファイル」の内容全体を取得できます。 Unicodeと8ビット文字列の混合については、上記の注を参照してください。 このような混合により、このメソッドは
UnicodeError
を上げる可能性があります。
- StringIO.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のようなストリームを返します。
これは組み込み型のオブジェクトを返すファクトリ関数であるため、サブクラス化を使用して独自のバージョンを作成する方法はありません。 属性を設定することはできません。 そのような場合は、元の StringIO モジュールを使用してください。
StringIO モジュールとは異なり、このモジュールは、プレーンASCII文字列としてエンコードできないUnicode文字列を受け入れることができません。
StringIO モジュールとのもう1つの違いは、文字列パラメーターを指定して StringIO()を呼び出すと、読み取り専用オブジェクトが作成されることです。 文字列パラメータなしで作成されたオブジェクトとは異なり、書き込みメソッドはありません。 これらのオブジェクトは通常は表示されません。 それらは
StringI
およびStringO
としてトレースバックで表示されます。
次のデータオブジェクトも提供されます。
- cStringIO.InputType
- 文字列パラメータを指定して StringIO()を呼び出して作成されたオブジェクトの型オブジェクト。
- cStringIO.OutputType
- パラメータなしで StringIO()を呼び出すことによって返されるオブジェクトの型オブジェクト。
モジュールにはCAPIもあります。 詳細については、モジュールのソースを参照してください。
使用例:
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()