Pythonで再帰的にファイル名を取得したい

再帰的にファイル名を取得する方法を以下のソースコードで説明します。
まずテスト用として、カレントディレクトリに下記の構造でテストディレクトリを生成しています。

example
├─dir_0
│ file_0
│ file_1
│ file_2
│ file_3
│ file_4
│ file_5
│ file_6
│ file_7
│ file_8
│ file_9

├─dir_1
│ file_0
│ file_1
│ file_2
│ file_3
│ file_4
│ file_5
│ file_6
│ file_7
│ file_8
│ file_9

├─dir_2
│ file_0
│ file_1
│ file_2
│ file_3
│ file_4
│ file_5
│ file_6
│ file_7
│ file_8
│ file_9

├─dir_3
│ file_0
│ file_1
│ file_2
│ file_3
│ file_4
│ file_5
│ file_6
│ file_7
│ file_8
│ file_9

└─dir_4
file_0
file_1
file_2
file_3
file_4
file_5
file_6
file_7
file_8
file_9

その後、os.walk()関数で生成したディレクトリ、ファイルと同様のパスが取得できているか確認をしています。

ソースコード

# walk.py

import os
import shutil

def make_test_files(path):
# ファイルを10個生成
for i in range(10):
filename = os.path.join(path,f"file_{i}")
fd = open(filename,"w")
fd.close()

return

def make_test_dirs():
root_dir = "example"

# ディレクトリが存在した場合は、削除する(mkdirエラー対策)
if os.path.exists(root_dir):
shutil.rmtree(root_dir)

os.mkdir(root_dir)

# ディレクトリを5個生成
for i in range(5):
sub_dir = os.path.join(root_dir,f"dir_{i}")
if os.path.exists(sub_dir) == False:
os.makedirs(sub_dir)
make_test_files(sub_dir)

return

def main():
# カレントディレクトリにテスト用ファイルを生成
make_test_dirs()

# カレントディレクトリのファイル一覧を表示
root_path = "."
for root,dirs,files in os.walk(root_path):
for file in files:
path = os.path.join(root,file)
print(path)

return

if __name__ == "__main__":
main()

実行と結果

python --version
Python 3.12.2
python walk.py
.\walk.py
.\example\dir_0\file_0
.\example\dir_0\file_1
.\example\dir_0\file_2
.\example\dir_0\file_3
.\example\dir_0\file_4
.\example\dir_0\file_5
.\example\dir_0\file_6
.\example\dir_0\file_7
.\example\dir_0\file_8
.\example\dir_0\file_9
.\example\dir_1\file_0
.\example\dir_1\file_1
.\example\dir_1\file_2
.\example\dir_1\file_3
.\example\dir_1\file_4
.\example\dir_1\file_5
.\example\dir_1\file_6
.\example\dir_1\file_7
.\example\dir_1\file_8
.\example\dir_1\file_9
.\example\dir_2\file_0
.\example\dir_2\file_1
.\example\dir_2\file_2
.\example\dir_2\file_3
.\example\dir_2\file_4
.\example\dir_2\file_5
.\example\dir_2\file_6
.\example\dir_2\file_7
.\example\dir_2\file_8
.\example\dir_2\file_9
.\example\dir_3\file_0
.\example\dir_3\file_1
.\example\dir_3\file_2
.\example\dir_3\file_3
.\example\dir_3\file_4
.\example\dir_3\file_5
.\example\dir_3\file_6
.\example\dir_3\file_7
.\example\dir_3\file_8
.\example\dir_3\file_9
.\example\dir_4\file_0
.\example\dir_4\file_1
.\example\dir_4\file_2
.\example\dir_4\file_3
.\example\dir_4\file_4
.\example\dir_4\file_5
.\example\dir_4\file_6
.\example\dir_4\file_7
.\example\dir_4\file_8
.\example\dir_4\file_9

Pythonでコマンドライン引数を扱いたい

Pythonでコマンドライン引数を取得する方法を以下のソースコードで説明します。

sys.argvの0番目は自身のファイル名、その後に1つめのコマンドライン引数、2つ目のコマンドライン引数 … の構造になっています。
そのため、この実行例ではsys.argvの要素は3つです。
sys.argvはリストのため、for文で要素を取り出したり、要素番号を指定してアクセスすることができます。

ソースコード

# argv.py

import sys

def main():
print(f"sys.argvに格納されている要素 → {sys.argv}")
print(f"sys.argvの要素数 → {len(sys.argv)}")

print("sys.argvのデータへのアクセス①")
for data in sys.argv:
print(data)

print("sys.argvのデータへのアクセス②")
for i in range(len(sys.argv)):
print(sys.argv[i])

return

if __name__ == "__main__":
main()

実行と結果

python --version
Python 3.12.2
python argv.py kinako mochi

sys.argvに格納されている要素 → ['argv.py', 'kinako', 'mochi']
sys.argvの要素数 → 3
sys.argvのデータへのアクセス①
argv.py
kinako
mochi
sys.argvのデータへのアクセス②
argv.py
kinako
mochi