HOWTO · Python

Python でジェネレーターが空かどうかを確認する

この記事では、Python でジェネレーターが空かどうかを確認する方法について説明します。

このページの内容

この記事では、Python でジェネレーターが空かどうかを確認する方法について説明します。

Python でジェネレーターが空かどうかを確認する

Python でジェネレーターが空かどうかを確認するとは、パスが空であることを確認するためにチェックされることを指します。 このためには、関連するパスをディレクトリまたはファイルとして事前に特定する必要があります。これにより、チェックに必要なアプローチを簡単に選択できるようになります。

次のスニペットは、filepath と dirpath という名前の 2つのプレースホルダー変数の関与を示しています。 これらの変数は、ローカル ファイルとディレクトリの識別に使用されます。

dirpath = "/mnt/f/code.books/articles/python"
filepath = "/mnt/f/code.books/articles/python/code/file_dir.py"

上記のプレースホルダー変数は、標準パッケージとして機能する Python の os モジュールで使用できます。 関連するオペレーティング システムで動作するオブジェクト、関数、および定数で使用できます。

os モジュールは os.path として表すこともでき、関数として機能する isdir() と isfile() を含みます。 これらの機能により、ユーザーは指定されたディレクトリと任意のファイルを区別できます。

両方の関数の動作における戻り値はブール値です。

次の例を検討してください。

import os

dirpath = "/mnt/f/code.books/articles/python"
filepath = "/mnt/f/code.books/articles/python/code/file_dir.py"

os.path.isfile(dirpath)  # False
os.path.isdir(dirpath)  # True
os.path.isfile(filepath)  # True
os.path.isdir(filepath)  # False

isdir() および isfile() 関数は、この例ではそれぞれ os.path.isdir および os.path.isfile として示されています。 両方の関数の動作における戻り値はブール値です。

これは、これらの関数の実装の出力が True または False として返されることを意味します。 True と False の戻り値は、それぞれの機能に基づいて、関連するパスがファイルかディレクトリかを示します。

この確認の後、Python 3.4 バージョン以降で pathlib という名前の別のモジュールを使用できます。 このモジュールを使用すると、オブジェクト指向のインターフェイスにより、ユーザーはファイル システムを簡単に操作できるようになります。

このモジュールは、os.path モジュールと比較して、実装内の簡素化を保証します。 これには、その作業に関連する Path クラスがあり、パスが引数として受け入れられます。

この後、そのパスによって Path オブジェクトが返されるため、ユーザーは属性とメソッドを使用して簡単にチェーンまたはクエリを実行できます。

次のコード スニペットを見てください。

from pathlib import Path

dirpath = "/mnt/f/code.books/articles/python"
filepath = "/mnt/f/code.books/articles/python/code/file_dir.py"

Path(dirpath).is_file()  # False
Path(dirpath).is_dir()  # True
Path(filepath).is_file()  # True
Path(dirpath).is_file()  # False

このスニペットでは、Path オブジェクトがチェックされ、戻り値としてブール値を持つディレクトリまたはファイルであることが確認されます。 dirpath および filepath 変数は、is_file() および is_dir() メソッドに関連付けられた Path オブジェクトにも関係しています。

それらの実装は、出力を True または False として返し、ディレクトリまたはファイルをオブジェクトとして示します。

次のステップは、ジェネレーターが空で、空のパスまたはファイルを含むことができるかどうかを確認することです。 パスまたはファイルにはゼロバイト ファイルという名前を付けることもでき、コンテンツやデータを持たないさまざまな種類にすることもできます。

データのないメタデータを含むファイルは、空のファイルの傘下にないことに注意してください。 これには、作成者を含む音楽ファイルが含まれる場合もあります。

空のファイルは、macOS や LINUX などのプラットフォームで簡単に作成できます。 これを行う方法のスニペットを次に示します。

$ touch emptyfile

次のスニペットは、Windows でそれを行う方法を示しています。

$ type nul > emptyfile

これを行った後、空でないファイルまたは空のファイルが空のファイルを指すことができる変数を定義する必要があります。 その空のファイルはおそらく 0 バイトですが、空でないファイルのサイズは 1 バイトです。

以下は、その例です。

emptyfile = "/mnt/f/code.books/articles/python/emptyfile"
nonemptyfile = "/mnt/f/code.books/articles/python/onebytefile”

これにより、オプションのパラメーターを next() 関数に使用できます。これにより、ユーザーはジェネレーターが空であることを確認できます。

そのためのコード スニペットを次に示します。

_exhausted = object()

if next(some_generator, _exhausted) is _exhausted:
    print("empty generator")

このスニペットでは、空のジェネレーターは使い果たされたイテレーターとオブジェクトの使用法によって示されます。 この後、if 条件が実装内に配置されます。これは、何らかのジェネレーター値を持つ使い果たされたジェネレーターをチェックします。

空のジェネレーターの場合、条件が満たされ、実装は空のジェネレーターを出力として返します。