私はどこでもこの答えを探しましたが、見つけられません。
特定のサブフォルダーを検索し、ファイルが含まれているかどうかを確認し、含まれている場合はフォルダーのパスを書き出すスクリプトを考えています。サブフォルダーの検索部分を理解しましたが、ファイルのチェックに困惑しています。
フォルダーが空かどうかを確認する方法について複数の提案を見つけました。フォルダーが空でないかどうかを確認するためにスクリプトを変更しようとしましたが、正しい結果が得られません。
最も近いスクリプトを次に示します。
for dirpath, dirnames, files in os.walk('.'):
if os.listdir(dirpath)==[]:
print(dirpath)
これにより、空のサブフォルダーがすべて一覧表示されますが、次のように変更しようとすると:
if os.listdir(dirpath)!=[]:
print(dirpath)
ファイルを含むサブフォルダーだけでなく、すべてがリストされます。
誰かが私を正しい方向に向けることができたら、本当に感謝しています。
これはPython 3.4の場合、それは重要です。
助けてくれてありがとう。
「files」はすでにディレクトリ内の内容を示しています。確認してください:
for dirpath, dirnames, files in os.walk('.'):
if files:
print(dirpath, 'has files')
if not files:
print(dirpath, 'is empty')
Python 3.4で導入された新しいpathlib
ライブラリを使用して、空ではないすべてのサブディレクトリを再帰的に抽出できます。例:
import pathlib
root = pathlib.Path('some/path/here')
non_empty_dirs = {str(p.parent) for p in root.rglob('*') if p.is_file()}
とにかくツリーを歩く必要があるため、ファイルが存在する親ディレクトリのセットを作成します。これにより、ファイルを含むディレクトリのセットが作成されます。その後、必要に応じて結果を作成します。
ディレクトリを削除できる場合、これを使用できます。
try:
os.rmdir( submodule_absolute_path )
is_empty = True
except OSError:
is_empty = False
if is_empty:
pass
os.rmdir は、ディレクトリが空の場合にのみディレクトリを削除し、そうでない場合はOSError例外をスローします。
これに関する議論を見つけることができます:
たとえば、git cloneを実行する場合は空のディレクトリを削除しても問題ありませんが、ディレクトリが空かどうかを事前に確認している場合はそうではないため、プログラムは空のディレクトリエラーをスローしません。
entities = os.listdir(dirpath)
for entity in entities:
if os.path.isfile(entity):
print(dirpath)
break
@Jon Clementsのpathlibの答えに加えて、pathlibでフォルダーが空かどうかを確認したいのですが、セットを作成しませんでした。
from pathlib import Path
is_empty = not bool(sorted(Path('some/path/here').rglob('*')))
sort(Path(path_here).rglob( '*'))は、ソートされたPosixPahアイテムのリストを返します。アイテムがない場合は、空のリストを返します。これはFalseです。したがって、パスが空の場合はis_emptyはTrueになり、パスに何かがある場合はfalseになります
同様のアイデアの結果{}と[]は同じ結果になります。
次の簡単なコードを使用できます。
_dir_contents = [x for x in os.listdir('.') if not x.startswith('.')]
if len(dir_contents) > 0:
print("Directory contains files")
_
現在の作業ディレクトリ(_.
_)内のファイルとディレクトリをチェックします。 os.listdir()
の_.
_を変更して、他のディレクトリを確認できます。