PythonのIOモジュールを使う方法

スポンサーリンク

今日は、PythonのIOモジュールの使い方を紹介します。

このモジュールは、ファイルに関するI/O操作(例:ファイルの読み書き)を行いたい場合に非常に便利です。

ファイルの読み書きには通常の read()write() メソッドが使えますが、このモジュールはこれらの操作に関してより柔軟性を与えてくれます。

このモジュールについてより深く理解するために、いくつかの例を挙げてみましょう。

スポンサーリンク

Python IO モジュール

このモジュールは標準ライブラリの一部なので、pipを使って別途インストールする必要はありません。

io モジュールをインポートするには、以下のようにします。

import io

IOモジュールには2つのクラスがあり、非常に便利です。

  • BytesIO -> バイトデータに対するI/O操作。
  • StringIO -> 文字列データに対する入出力操作

これらのクラスにアクセスするには、 io.BytesIOio.StringIO を使用します。

それでは、1つずつ見ていきましょう。

Python BytesIO クラス

H

Python StringIO クラス

io.BytesIO と同様に、 io.StringIO クラスは StringIO バッファから文字列関連のデータを読み込むことができる。

import io
bytes_stream = io.BytesIO(b'Hello from Journaldevx0AHow are you?')

文字列バッファからデータを読み込むには string_stream.read() を、書き込むには string_stream.write() を使用します。

これは、ファイルからの読み込み/書き込みと非常によく似ています。

また、getvalue() を用いて内容を表示することができます

import io
bytes_stream = io.BytesIO(b'Hello from Journaldevx0AHow are you?')
print(bytes_stream.getvalue())

結果は以下の通りです。

b'Hello from Journaldev
How are you?'

同じバッファに書き込んでいるので、新しいコンテンツは明らかに古いものを上書きします!

StringIOバッファからの読み込み

書き込みと同様に、buffer.read() を使用して StringIO バッファから読み込むことができます。

bytes_stream.close()

結果は以下の通りです。

import io
 
string_stream = io.StringIO("Hello from Journaldev
How are you?"
)

見ての通り、内容は読み込んだバッファの中に入っており、 buffer.read() を使って出力されます。

io を使ってファイルを読み込む

ファイルオブジェクトから読み込むのと同様に、io.open() メソッドを使用してファイルから直接読み込むことができます。

ここで、このモジュールはバッファードリードとノンバッファードリードのオプションを与えてくれます。

例えば、次の例では buffering = SIZE と設定することで、バッファードリードを使用してファイルを読み込んでいます。

例えば、 sample.txt が以下のような内容であるとします。

import io
 
string_stream = io.StringIO("Hello from Journaldev
How are you?"
)
 
# Print old content of buffer
print(f'Initially, buffer: {string_stream.getvalue()}')
 
# Write to the StringIO buffer
string_stream.write('This will overwrite the old content of the buffer if the length of this string exceeds the old content')
 
print(f'Finally, buffer: {string_stream.getvalue()}')
 
# Close the buffer
string_stream.close()
Initially, buffer: Hello from Journaldev
How are you?
Finally, buffer: This will overwrite the old content of the buffer if the length of this string exceeds the old content

結果は以下の通りです。

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

見ての通り、このファイルは正常に読み込まれました! ここでは、ioが約5バイトのバッファサイズを使用してファイルを読み込みます。

io.open() と os.open() の使い分け

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

それに対して、os.open()open() 関数へのシステムコールを実行します。

これはファイルディスクリプタを返すので、io ハンドルオブジェクトのように使うことはできません。

io.open()os.open() のラッパー関数であり、多くのエラーを自動的に処理してくれるので、一般にこのようなラッパー関数を使用することは良い習慣です。

まとめ

この記事では、Python IO モジュールとその 2 つの主要なクラスである io.BytesIOio.StringIO を使用して、バイトデータと文字列データをバッファに読み書きする方法について学びました。

タイトルとURLをコピーしました