Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでディレクトリ内にサブディレクトリが含まれているか確認する方法

Pythonで、あるディレクトリの中にサブディレクトリ(別のディレクトリ)が含まれているかどうかを確認したい場合は、逆の発想で考えると簡単です。つまり、「ファイル以外のエントリが存在するかどうか」を os.path.isfile メソッドを使ってチェックします。

isfileメソッドを使った基本的な確認方法

os.listdir() でディレクトリ内のエントリ一覧を取得し、各エントリに対して os.path.isfile() を実行します。False が返ってきたエントリはファイルではない、すなわちディレクトリだということになります。

import os

list_dir = os.listdir('.')
for f in list_dir:
    if not os.path.isfile(os.path.join('.', f)):
        print("Not a file")

組み込み関数allを使った簡潔な書き方

より簡潔に判定したい場合は、組み込み関数 all を使う方法もあります。リスト内包表記で各エントリがファイルかどうかを判定し、その結果を all に渡します。

import os

list_dir = [os.path.isfile(os.path.join('.', f)) for f in os.listdir('.')]
print(all(list_dir))

all 関数は、指定したディレクトリ内のすべてのエントリがファイルである場合にのみ True を返します。つまり、結果が False であれば、そのディレクトリにはサブディレクトリが含まれていることになります。

pathlibを使ったモダンな方法(補足)

Python 3.4以降では、pathlib モジュールを使うとより直感的に記述できます。any 関数と Path.is_dir() を組み合わせれば、「ディレクトリが1つでも含まれているか」を直接判定できます。

from pathlib import Path

has_subdir = any(p.is_dir() for p in Path('.').iterdir())
print(has_subdir)

コードの可読性を重視する場合は、こちらの pathlib を使った方法もおすすめです。用途に応じて、シンプルな os ベースの方法と使い分けるとよいでしょう。

  1. Pythonで与えられた数値がフィボナッチ数かどうかを判定する方法

    本記事では、与えられた数値がフィボナッチ数であるかどうかを判定する問題の解決策について解説します。 問題の定義 ある数値 n が与えられたとき、その数値がフィボナッチ数であるかどうかを判定します。 第 n 項のフィボナッチ数は、直前の2つのフィボナッチ数の和として定義されることは広く知られています。しかし、フィボナッチ数列には漸化式以外にも興味深い数学的性質があります。 フィボナッチ数の判定条件 ある数値 n がフィボナッチ数であるのは、「5×n² + 4」または「5×n² − 4」のいずれかが完全平方数であるとき、かつそのときに限る この性質を利用すれば、フィボナッチ数列を実際に生成しなくて

  2. 【Python】与えられた数がフィボナッチ数かどうかを判定する方法を解説

    本記事では、以下の問題文に対する解決策について詳しく学んでいきます。 問題の定義 数値 n が与えられたとき、その数がフィボナッチ数であるかどうかを判定します。 ご存知のとおり、n番目のフィボナッチ数は「直前の2つのフィボナッチ数の和」として定義されます。しかし、この漸化式以外にも、フィボナッチ数には興味深い数学的な性質が存在します。 フィボナッチ数の判定に使える重要な性質 ある数 n がフィボナッチ数であるのは、次の条件が成り立つ場合、かつその場合に限られます。 5×n² + 4 が完全平方数である または 5×n² − 4 が完全平方数である つまり、上記のどちらか一方(または両方)が