PythonのIOモジュールでは、ファイル関連の入出力操作を管理することができます。
Python IOモジュール
Pythonでストリームやバッファの操作を行うためにioモジュールを使用する方法はたくさんあります。 この点を証明するために、ここでは多くの例を示します。
Python BytesIO
ioモジュールのバイトIO操作を使うと、変数で行うのと同じように、データをメモリ内のバッファにバイトとして保持することができます。
以下にサンプルプログラムを示します。
import iostream_str = io.BytesIO(b"JournalDev Python: \x00\x01")print(stream_str.getvalue())
このプログラムの出力を見てみましょう。
getvalue()
関数は、Bufferからの値をStringとして受け取るだけです。
Python StringIO
StringIO
BytesIO
と使い方が非常に似ています。
import iodata = io.StringIO()data.write('JournalDev: ')print('Python.', file=data)print(data.getvalue())data.close()
このプログラムの出力を見てみましょう:
バッファを使い終わった後、バッファを閉じていることに注目してください。
また、変数のIOストリームを指定するためにオプションの引数を持つprintメソッドを使用していますが、これはprintステートメントと完全に互換性があります。
StringIOを使用した読み取り
StringIOバッファにデータを書き込んだら、それを読み取ることもできます。
import ioinput = io.StringIO('This goes into the read buffer.')print(input.read())
このプログラムの出力を見てみましょう。
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を読んでください。