Python io – BytesIO, StringIO

PythonのIOモジュールでは、ファイル関連の入出力操作を管理することができます。

Python IOモジュール

Pythonでストリームやバッファの操作を行うためにioモジュールを使用する方法はたくさんあります。 この点を証明するために、ここでは多くの例を示します。

Python BytesIO

ioモジュールのバイトIO操作を使うと、変数で行うのと同じように、データをメモリ内のバッファにバイトとして保持することができます。

以下にサンプルプログラムを示します。

import iostream_str = io.BytesIO(b"JournalDev Python: \x00\x01")print(stream_str.getvalue())

このプログラムの出力を見てみましょう。
python IO BytesIO example
getvalue() 関数は、Bufferからの値をStringとして受け取るだけです。

Python StringIO

StringIOBytesIOと使い方が非常に似ています。

import iodata = io.StringIO()data.write('JournalDev: ')print('Python.', file=data)print(data.getvalue())data.close()

このプログラムの出力を見てみましょう:
python StringIO example
バッファを使い終わった後、バッファを閉じていることに注目してください。

また、変数のIOストリームを指定するためにオプションの引数を持つprintメソッドを使用していますが、これはprintステートメントと完全に互換性があります。

StringIOを使用した読み取り

StringIOバッファにデータを書き込んだら、それを読み取ることもできます。

import ioinput = io.StringIO('This goes into the read buffer.')print(input.read())

このプログラムの出力を見てみましょう。
python io module read stringIO data

Reading file using StringIO

ファイルを読み込んで、Bytesとしてネットワーク上にストリーミングすることも可能です。 ioモジュールを使って、画像のようなメディアファイルをByteに変換することができます。

import iofile = io.open("whale.png", "rb", buffering = 0)print(file.read())

このプログラムの出力を見てみましょう:

このプログラムを実行するには、カレントディレクトリにwhale.png画像が存在していなければなりません。

io.open() vs os.open()

io.open() 関数は、ファイル I/O を実行するための高レベルのインターフェイスとして作られているため、I/O 操作を実行するには好ましい方法です。

os.open() 関数は、低レベルのPOSIX syscallを処理します。 POSIXベースの引数を入力し、オープンされたファイルを表すファイルディスクリプターを返します。

全体として、io.open()os.open()関数の単なるラッパーです。

おわりに

このレッスンでは、pythonのIOモジュールの簡単な操作と、BytesIOでUnicode文字を管理する方法を学びました。 しかし、ファイルの削除やコピーなどの完全なファイル操作を探しているのであれば、pythonのread fileを読んでください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です