Python 最近更新されたファイルのリストをCSVで保存
はじめに
PCを利用しているといつの間にかファイルが増えていき、ストレージ容量が不足してしまうことがあります。自分で作成、保存したファイルであれば手動で管理できるのですが、OSやアプリが自動生成するファイルについては管理が難しいという課題を抱えていました。
特にサイズが大きいファイルであればまだ分かりやすいのですが、小さなファイルが大量に作成される場合は調査が難しい状況でした。
そこで、ここでは特定の日付以降に更新されたファイルのリストを出力するスクリプトを作成しました。
バージョン情報
python: 3.7.9 pandas: 1.2.3
ソースコード
ソースコードと使用例は以下の通りです。
メインの処理
import os import glob import datetime import pandas as pd # 指定した日付以降更新されたファイルのリストを保存する def save_updated_files(save_name, files, date, get_size=False): updated_files = [] for path in files: if not os.path.isfile(path): continue try: # 更新日を取得 updated_time = os.path.getmtime(path) updated_time = datetime.datetime.fromtimestamp(updated_time) # 更新日の比較 if updated_time >= date: info = [path, updated_time] # ファイルサイズを取得する(オプション) if get_size: info.append(os.path.getsize(path)) updated_files.append(info) # ファイルにアクセスできない場合は除外する except OSError: continue print('files:', len(updated_files)) columns = ['file', 'date'] if get_size: columns.append('size(bytes)') # CSVで保存 df = pd.DataFrame(updated_files, columns=columns) df.to_csv(save_name, index=False, encoding='shift_jis')
使用例
# ファイルのリストを取得 file_list = glob.glob(r'C:\example\**\*.*', recursive=True) # 2021年1月1日以降更新されたファイルのリストを保存する save_updated_files('updated_files.csv', file_list, datetime.datetime(2021, 1, 1, 0, 0, 0), get_size=True)
補足
検索対象のファイルリスト(フォルダ)については自由度があったほうが良いと思い、ここでは関数の外で処理しています。例えば特定のフォルダ内のファイルのみ対象にする、複数のフォルダのファイルを対象にする、特定の拡張子のファイルのみを対象にするなどです。
関数内の主要な処理はコメントの通りです。オプションとして引数でget_size=True
とすることでファイルのサイズも取得できるようにしています。
注意点としては、ファイルにアクセスできない場合にはOSErrorが発生する可能性があるということです。ここではtry - except
文で除外しています。