Python で ファイル一覧を取得するには os.listdir()を使います。
下記は、 os.listdir()を 利用してサブディレクトリ(サブフォルダ)内のファイルも取得するコード例です。
import os import json def nest_list_dir(in_path: str, file_list: list = None): if file_list is None: file_list:list = [] for a_obj in os.listdir(in_path): # 一覧取得 a_path = os.path.join(in_path, a_obj) if os.path.isdir(a_path): # ディレクトリなら nest_list_dir(a_path, file_list) # サブディレクトリ(サブフォルダ)に 移動 file_list.append(f"ディレクトリ({a_path})") else: file_list.append(a_path) # ディレクトリ以外はリスト追記 return file_list for a in nest_list_dir('./日本'): print(a)
./日本 フォルダ構成は下↓です
実行すると下↓のようにサブフォルダまで取得できました。
上↑コード例は Listでしたが、 下↓は JSONの構成で出力できる構成に変更したコード例です
import os import json from decimal import Decimal def nest_list_dir_to_dict(in_path: str): file_list:list = [] for a_obj in os.listdir(in_path): # 一覧取得 a_path = os.path.join(in_path, a_obj) if os.path.isdir(a_path): # ディレクトリなら nest_list = nest_list_dir_to_dict(a_path) # サブディレクトリ(サブフォルダ)に 移動 file_list.append({a_obj: nest_list}) else: file_list.append(a_obj) # ディレクトリ以外はリスト追記 return file_list print(json.dumps(nest_list_dir_to_dict('./日本'), ensure_ascii=False, indent=2, separators=(',', ':'), default=lambda _o : int(_o) if isinstance(_o, Decimal) else TypeError))
実行すると 下↓のように出力されました
[ ".DS_Store", { "東京":[ "新宿区.txt", "文京区.txt" ] }, { "大阪":[ ".DS_Store", "鶴見区.txt", { "東大阪市":[ "寺前町.txt" ] } ] } ]