ディレクトリ直下のファイル一覧、ディレクトリ一覧を3つの方法で取得します。
ディレクトリは以下、ファイルはtxtとlogの2種類です。
ディレクトリ、ファイル構成
sample_dir
│
│ f_01.txt
│ f_02.log
│
├─d_01
│ f_01_1.txt
│ f_01_2.txt
│ f_01_3.txt
│
└─d_02
f_02_1.log
pathlibで ディレクトリ配下のファイル一覧を取得する
pathlib.Pathを利用して、 拡張子を指定したファイル一覧およびディレクトリとファイル一覧を表示する サンプルコード です。
import pathlib
p = pathlib.Path("sample_dir")
# ディレクトリ配下のテキストファイル一覧を表示(拡張子指定)
for f in p.glob("**/*.txt"):
print(f)
print()
# ディレクトリ配下のディレクトリ、ファイル一覧を表示
for f in p.glob("**/*"):
print(f)
# - 結果1
# sample_dir\f_01.txt
# sample_dir\d_01\f_01_1.txt
# sample_dir\d_01\f_01_2.txt
# sample_dir\d_01\f_01_3.txt
# - 結果2
# sample_dir\d_01
# sample_dir\d_02
# sample_dir\f_01.txt
# sample_dir\f_02.log
# sample_dir\d_01\f_01_1.txt
# sample_dir\d_01\f_01_2.txt
# sample_dir\d_01\f_01_3.txt
# sample_dir\d_02\f_02_1.log
pathlib.Path関数にディレクトリのパスを指定します。glob関数で取得するサンプルは相対パスですが、絶対パスも指定可能です。
pathlibの詳細については、公式ドキュメントを参照ください。
globでディレクトリ配下のファイル一覧を取得する
globを利用して、拡張子を指定したファイル一覧およびディレクトリとファイル一覧を表示する サンプルコード です。
import glob
TARGET_DIR = "sample_dir"
# ディレクトリ配下のテキストファイル一覧を表示(拡張子指定)
for f in glob.glob(TARGET_DIR + "/**/*.txt", recursive=True):
print(f)
print()
# ディレクトリ配下のディレクトリ、ファイル一覧を表示
for f in glob.glob(TARGET_DIR + "/**", recursive=True):
print(f)
# - 結果1
# sample_dir\f_01.txt
# sample_dir\d_01\f_01_1.txt
# sample_dir\d_01\f_01_2.txt
# sample_dir\d_01\f_01_3.txt
# - 結果2
# sample_dir\
# sample_dir\d_01
# sample_dir\d_01\f_01_1.txt
# sample_dir\d_01\f_01_2.txt
# sample_dir\d_01\f_01_3.txt
# sample_dir\d_02
# sample_dir\d_02\f_02_1.log
# sample_dir\f_01.txt
# sample_dir\f_02.log
glob.glob関数にパスを指定します、再帰的に検索する行うには、「recursive」に「True」を指定します。
globの詳細については、公式ドキュメントを参照ください。
walkでディレクトリ配下のファイル一覧を取得する
os.walkを利用して、拡張子を指定したファイル一覧およびディレクトリとファイル一覧を表示する サンプルコード です。
import os
TARGET_DIR = "sample_dir"
# ディレクトリ配下のテキストファイル一覧を表示
for dir_path, dir_names, file_names in os.walk(TARGET_DIR):
for file_name in file_names:
if ".txt" in file_name:
print(os.path.join(dir_path, file_name))
print()
# ディレクトリ配下のディレクトリ、ファイル一覧を表示
for dir_path, dir_names, file_names in os.walk(TARGET_DIR):
for dir_name in dir_names:
print(os.path.join(dir_path, dir_name))
for file_name in file_names:
f = os.path.join(dir_path, file_name)
print(f)
# - 結果1
# sample_dir\f_01.txt
# sample_dir\d_01\f_01_1.txt
# sample_dir\d_01\f_01_2.txt
# sample_dir\d_01\f_01_3.txt
# - 結果2
# sample_dir\d_01
# sample_dir\d_02
# sample_dir\f_01.txt
# sample_dir\f_02.log
# sample_dir\d_01\f_01_1.txt
# sample_dir\d_01\f_01_2.txt
# sample_dir\d_01\f_01_3.txt
# sample_dir\d_02\f_02_1.log
os.walk関数にパスを指定します。これまでと違うのは、os.walkでは、ディレクトリパス、ディレクトリ名、ファイル名の3つの戻り値が返却されます。
os.walkの詳細については、公式ドキュメントを参照ください。