Pythonでaiofileを用いた非同期のファイルの書き込みと読み込み

スポンサーリンク

Pythonでaiofileを用いた非同期のファイルの書き込みと読み込みについて解説しています。

今回はaiofileを用います。このライブラリ・モジュールはPythonの標準ライブラリではありませんので、事前にインストールする必要があります。

■Python

今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows11)

■aiofileを用いた非同期のファイルの書き込みと読み込み

では、早速aiofileを用いて非同期のファイルの書き込みと読み込みを行うスクリプトを書いていきます。

■コード

import asyncio
from aiofile import async_open

async def main():
    # ファイルを非同期で開く
    async with async_open('example01.txt', 'w') as f:
        # ファイルに書き込み
        await f.write('こんにちは!')

    # ファイルを非同期で開く
    async with async_open('example01.txt', 'r') as f:
        # ファイルから読み込み
        content = await f.read()

        # 読み込んだ内容を表示
        print(content)

# イベントループを作成してメイン関数を実行
loop = asyncio.get_event_loop()
loop.run_until_complete(main())

まずはimport asyncioとfrom aiofile import async_openと記述し、必要なライブラリとモジュールをインポートします。asyncioは非同期処理をサポートするためのPythonの標準ライブラリであり、aiofileは非同期でファイルを操作するためのモジュールです。

次にasync def main()を記述し、非同期関数を定義します。main()関数は非同期処理のエントリーポイントとなるメイン関数です。

定義後、async with async_open(‘example01.txt’, ‘w’) as f:と記述し、非同期でファイルを書き込むためのコンテキストマネージャを作成します。async_open()関数は、指定されたファイルを非同期で開くための関数です。第1の引数,パラメータにはファイルのパス、第2引数,パラメータにはモード(’w’は書き込みモード)を指定します。”as f”によって、ファイルオブジェクトがfという変数に割り当てられます。

その後、await f.write(‘こんにちは!’)と記述し、非同期でファイルにテキストを書き込みます。f.write()メソッドは、引数として渡されたテキストをファイルに書き込む非同期操作です。今回は’こんにちは!’という日本語の文字列がファイルに書き込まれます。

今後はasync with async_open(‘example01.txt’, ‘r’) as f:と記述し、非同期でファイルを読み込むためのコンテキストマネージャを作成します。’r’は読み込みモードを指定します。

次にcontent = await f.read()と記述し、非同期でファイルから内容を読み込みます。f.read()メソッドは、ファイルからデータを非同期で読み取ります。読み込んだ内容はcontent変数に格納されます。格納後、print(content)で、読み込んだ内容を表示します。

次にloop = asyncio.get_event_loop()と記述し、新しいイベントループを作成します。イベントループは非同期処理を管理するためのメカニズムです。

イベントループを作成後、loop.run_until_complete(main())と記述し、メイン関数であるmain()関数を実行します。run_until_complete()メソッドは、指定されたコルーチンが完了するまでイベントループを実行します。

■検証・実行

今回書いたスクリプトを「file_test_a.py」という名前でPythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

実行してみると、aiofileを用いて非同期のファイルの書き込みと読み込みを行い読み込んだものを表示させることができました。

表示後、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)内を確認すると「example01.txt」というファイルが生成されていることも確認できました。

コメント

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