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

Pythonで現在のディレクトリ内のすべてのサブディレクトリ一覧を取得する方法

os.walkを使ってサブディレクトリを再帰的に取得する

Pythonで、あるディレクトリ配下のすべてのサブディレクトリを再帰的に一覧化したい場合は、標準ライブラリのos.walk関数を使うのが最も手軽です。os.walkは走査中の各ディレクトリについて「(ディレクトリのパス, サブディレクトリ名のリスト, ファイル名のリスト)」という3要素のタプルを順番に返します。タプルの最初の要素(パス)だけを取り出せば、起点となるディレクトリとその配下の全サブディレクトリのパス一覧が得られます。

実際のコードは次のようになります。

import os

subdirs = [x[0] for x in os.walk('.')]
print(subdirs)

このコードでは、リスト内包表記によって各タプルの先頭要素(ディレクトリのパス)を収集しています。結果にはカレントディレクトリ自体も含まれるため、不要な場合はsubdirs = subdirs[1:]のように先頭を除外するとよいでしょう。

os.listdirとos.path.isdirで直下のディレクトリのみを取得する

再帰的な探索は不要で、指定したディレクトリの直下にあるディレクトリだけを取得したい場合は、os.listdirでエントリ一覧を取得し、os.path.isdirでフィルタリングする方法がシンプルです。

使用例

import os

d = '.'
subdirs = [os.path.join(d, o) for o in os.listdir(d) if os.path.isdir(os.path.join(d, o))]

os.path.joinを組み合わせることで、ファイル名だけでなく完全なパスとして結果を受け取れる点がポイントです。

pathlibを使ったモダンな書き方

Python 3.4以降では、オブジェクト指向的なAPIを持つpathlibモジュールを使うこともできます。直下のディレクトリのみを取得する場合は次のように書けます。

from pathlib import Path

subdirs = [p for p in Path('.').iterdir() if p.is_dir()]

また、再帰的にすべてのサブディレクトリを取得したい場合は、rglobglob('**/*')が便利です。

from pathlib import Path

subdirs = [p for p in Path('.').rglob('*') if p.is_dir()]

用途に応じて、再帰的な一覧が必要ならos.walkpathlib.rglob、直下の一覧だけで十分ならos.listdiros.path.isdirPath.iterdirを選ぶと、意図が明確で読みやすいコードになります。

  1. JavaでMongoDBの全データベース一覧を取得する方法

    MongoDBでは、シェル上で show dbs コマンドを実行するだけで、サーバー内に存在するデータベースの一覧を簡単に確認できます。> show dbs admin config local myDatabase sampleDatabase students test testDBJavaアプリケーションからMongoDBに接続し、すべてのデータベース名を取得したい場合は、listDatabaseNames() メソッドを使用します。このメソッドは MongoIterable<String> 型のオブジェクトを返すため、拡張for文を使って各データベース名を1つずつ取り

  2. PythonとMatplotlibで点群の中心座標を取得・可視化する方法

    一連のポイント(点群)の中心を求めるには、リスト内のすべての要素を合計し、その合計値をリストの要素数(長さ)で割ります。この計算結果が、対応する各軸における中心座標となります。これはいわゆる「平均値」であり、点群の重心を表します。実装の手順データポイントとして x 座標と y 座標の2つのリストを作成します。plot() メソッドを使って、x および y のデータポイントをプロットします。x と y の各リストから、sum() と len() を組み合わせて中心座標のタプルを算出します。算出した中心点をグラフ上にプロットします。annotate() メソッドを使い、中心点に「center」とい