SE_BOKUのまとめノート的ブログ

SE_BOKUが知ってること・勉強したこと・考えたことetc

Python3のPathlibでフォルダ以下のフォルダを再帰的に処理するBOKU的ひな形/Pythonサンプル

目次

Python3のPathlibでフォルダ以下のフォルダを再帰的に処理するBOKU的ひな形

仕事などで作業結果のチェックなどで、特定のフォルダ以下のファイルを再帰的に取得して、なにかしらの処理をする使い捨てツールを作ることがよくあります。

ツールでよく使う基本形と情報

そんなときの基本形。

  1. Windowsパスの「\」を「/」に変換する。
  2. 再帰的にすべてのフォルダとファイルをPathオブジェクトとして取得する。
  3. それをループで回しファイルの場合とフォルダの場合でそれぞれ処理する

という感じになります。

そして、その時の情報としてよく使うのが。

  • ファイル名またはフォルダ名のみ取得
  • フルパスを取得
  • ファイルの親フォルダを取得
  • ファイルの作成日時を取得
  • ファイルの最終更新日時を取得
  • ファイルの最終アクセス日時を取得
  • ファイルのサイズを取得

です。

僕の場合、この程度の情報でおおむね作業はできてます。

ツールでよく使う基本形と情報のサンプルソース

Pythonの「Pathlib」を使ったサンプルです。

docs.python.org

機能のごくごく一部しか使ってませんが。

import pathlib
import datetime

# 比較フォルダ指定
path = r"C:\01_samples\dj_wtv"

# Windowsパスの「\」を[/」に変換する
path01 = path.replace("\\", "/") + "/"

# ファイルリストを再帰的に取得
files01 = list(pathlib.Path(path01).glob("**/*"))

# ファイルリストから「Path」オブジェクトをひとつずつ取り出して処理する
for file in files01:
    if file.is_file():
        # ファイルの場合のみ実行する処理
        print(file.name)  # ファイル名のみ出力
        print(file.as_posix())  # フルパス名でファイル名を出力
        print(file.parent.as_posix())  # ファイルのあるフォルダ名のみ出力
        # ファイルのサイズが(1024×1024)バイト=1MBより大きいものだけ処理する
        if file.stat().st_size >= (1024 * 1024):
            # 最終アクセス時刻
            print(
                datetime.datetime.fromtimestamp(
                    file.stat().st_atime).strftime('%Y年%m月%d日 %H:%M:%S'))
            # Windows では作成時刻 Unix ではメタデータの最終更新時刻
            print(
                datetime.datetime.fromtimestamp(
                    file.stat().st_ctime).strftime('%Y年%m月%d日 %H:%M:%S'))
            # 最終内容更新時刻
            print(
                datetime.datetime.fromtimestamp(
                    file.stat().st_mtime).strftime('%Y年%m月%d日 %H:%M:%S'))
            # ファイルサイズ
            print(file.stat().st_size)
        print("------------------")
    if file.is_dir():
        # ディレクトリの場合のみ実行する処理
        print(file.name)  # フォルダ名のみ出力
        print(file.as_posix())  # フルパスでフォルダ名を出力
        print("------------------")

コメントを見れば、特に補足説明はいらないと思います。 

ではでは。