no-image

【完成】n日前の特定のファイルを削除する【python】

前回のプログラムでわけがわからなくなってしまいました。以前の記事は↓です。

【未完成プログラム】n日前の特定のファイルを削除したい。

この「n日前の特定のファイルを削除するプログラム」が完成したので紹介したいと思います。(きった貼ったしただけ)

n日前の特定のファイルを削除する

import datetime, os, send2trash

now = datetime.date.today()# 現在の日付を取得
#os.chdir()カレントは好きなところを選んでください。
for file in os.listdir():
 mtime = datetime.date.fromtimestamp(int(os.path.getmtime(file)))
 base, ext = os.path.splitext(file)
 if (now - mtime).days >= 14: # 14日以上経過している場合は削除
  if ext.endswith('.jpg') or ext.endswith('.png'):
   send2trash.send2trash(file)

このプログラムのポイント

一番難しいのは日付の計算かと思います。実際僕自身datetimeモジュールの使い方はあまりよくわかっていません。

5行目のforループではfor file in os.listdir()としています。oslistdir()関数は引数を何も指定しなければカレントディレクトリになり、ファイルをリストにします。それをfile変数に突っ込んで回します。

mtime = の部分は詳しく説明できる知識がありません。ただ、このプログラムは動きます。datetimeやint型の扱い方がかなめになってくる部分でしょう。次の7行目がおもしろいです。前回も説明しましたが、splitextはdirnameとbasenameに自動で振り分けて変数に入れてくれます。

dirnameとはパスの部分でbasenameは拡張子の部分です。問題は8行目でしょう。ここは型変換などを把握していないと理解に苦しむでしょう。実際僕も把握していません。ただこのプログラムは動きます。

次もポイントです。実は if ext == ‘.jpg’ などとすることもできます。しかしこの構文で動きを確認した結果、なぜかショートカットファイルまで消えてしまいました。そのためext.endswith()にしています。endswith()メソッドは引数の最後が同じだったらTrueです。

最後は間違って完全削除してしまわないようにsend2trash()メソッドでゴミ箱に送っています。send2trashは外部モジュールです。ですので、pip installをして下準備をしておく必要があります。

このプログラムは8行目の数字さえかえれば、わりと広い範囲に対応できると思います。しかし、「ここ」を消したい!とピンポインティングできてないのが心残りです。