はるか昔、このブログを解説した頃は、体系立ててノウハウをアクセスしやすいように書いていくようにしようとしていたけれども、
ユーザーは検索エンジンに頼ってくるだろうから、もう単発でノウハウを書き込むほうが1番良いのかもしれない
というわけでファイル一覧の取得方法。
基本的なことだけれども、一覧取得関数やディレクトリ判定関数などすぐに忘れてしまうので備忘録として…
ファイル一覧
import os dir = "/path/to/dir/" def print_files(): for f in os.listdir(dir): print(f) if __name__ == '__main__': print_files()
簡単な構造はこれ。
ただ単にlistdirにディレクトリを渡すだけ
サブディレクトリを全部取得
import os DIR = "/PATH/TO/DIR/" def print_files(dir): for f in os.listdir(dir): full_name = dir + f if os.path.isfile(full_name): print(full_name) elif os.path.isdir(full_name): print_files(full_name + "/") if __name__ == '__main__': print_files(DIR)
ポイントは再帰的に関数を呼び出す。
関数は調べたいディレクトリを引数にとる形にする。
os.path.isfile と os.path.isdirはその名の通りファイルかディレクトリかを判定してくれる。
一覧で取得した中にディレクトリの物があった場合、
関数内で同じ関数にディレクトリを渡して実行をする。
これで全部のサブディレクトリまでチェックできる。
ちなみにこの関数の再帰呼び出しだが、Pythonでは上限があって1000回まで呼び出せるのがデフォルトの限界になっている。
関数は実行されている時にコールスタックという領域に関数の情報が格納されるわけだけども、それには限界がある。
再帰呼び出しの階層が深いと上限に達してしまうので、終わりがわからないような場合は使わないほうがいいが、
ディレクトリの階層ならそこまで深いものは無いだろうから、そんなに気にしないで使っている。