Python サブフォルダ(サブディレクトリ)含めた ファイル名一覧取得

Python サブフォルダファイル一覧取得

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)

./日本 フォルダ構成は下↓です

Python サブフォルダ(サブディレクトリ)含めた ファイル名一覧取得 フォルダ構成

実行すると下↓のようにサブフォルダまで取得できました。

Python サブフォルダ含めたファイル一覧 取得 結果

上↑コード例は 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"
        ]
      }
    ]
  }
]
2022 MJELD TECHNOLOGIES. ALL RIGHTS RESERVED