みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
プログラミング初心者&Windowsユーザー向け、Pythonでフォルダ内の古いファイルを自動削除するツールの作り方をお伝えしています。
前回の記事はコチラ。
フォルダ内の特定の拡張子のファイルを抽出するところまで進みました。
以下の手順でいうと、2の途中までいった感じですね。
- フォルダ内のファイルを全てについてループする
- その中でZIPファイルがあれば作成日時とファイル名をリスト化する
- リストの数が3を超えていたら、作成日時が古いファイルを削除する
今回はその続きを進めていきますよ。
Pythonでリストに要素を追加をする方法、リストの要素を並び替えをする方法です。
では、行ってみましょう!
前回のおさらい
前回作ったスクリプトはコチラです。
import os
for file in os.listdir():
base, ext = os.path.splitext(file)
if ext == '.zip':
print('file:{},ext:{}'.format(file,ext))
os.listdir関数で作業フォルダ内の全てのファイルについて繰り返し、その拡張子が「.zip」であればprintするというものでした。
拡張子を分割するにはos.path.splitext関数を使いました。
appendメソッドでリストに追加をする
まず、拡張子が「.zip」のファイルについて、そのファイル名と作成日時をリストとして蓄積をしていきたいと思います。
リストに要素を追加するにはappendメソッドを使います。
書き方はコチラ。
ファイルと作成日時をリスト化したいので、二次元リストになりますかね。
リストに要素を追加するスクリプト
このようなスクリプトを作りました。
import os
filelists = []
for file in os.listdir():
base, ext = os.path.splitext(file)
if ext == '.zip':
filelists.append([file, os.path.getctime(file)])
print(filelists)
appendメソッドを使うには、リストは空でも用意しておく必要があるので、2行目で空のリストを定義しています。
6行目ですが、appnedメソッドでリストに追加しています。
なお、ファイルの作成日時を取得するにはos.path.getctime関数でしたね。以下記事をご参考ください。
実行をしますと…
作成日時はエポック秒なので、パッと見わけがわかりませんが、一応リスト化はうまくいってそうですね。
リストを作成日時降順で並び替える
リストを並び替えるにはsortメソッドを使います。
書き方はコチラ。
まず、itemgetterというのは、operatorモジュールの関数ですので、インポートしておく必要があります。
それで、インデックスでリストの何番目の要素をソートの基準にするかを指定します。
今回は、二つ目の作成日時を基準にしたかったので、インデックス1を指定すればOK。
また、reverse=Trueは省略可能ですが、省略すると昇順、そのまま書いておけば降順での並び替えになります。
つまり、ここをTrueにしておけば、リストを作成日時の降順で並び替えをすることができるというわけです。
リストの要素を並び替えるスクリプト
スクリプトを以下のように修正しました。
8行目にsortメソッドを追加しています。
import os
from operator import itemgetter
filelists = []
for file in os.listdir():
base, ext = os.path.splitext(file)
if ext == '.zip':
filelists.append([file, os.path.getctime(file)])
filelists.sort(key=itemgetter(1), reverse=True)
print(filelists)
こちらのスクリプトを実行すると…
このように、作成日時の降順でリストを並び替えることができました。
まとめ
以上、Pythonでリストに要素を追加する方法、リストの要素をソートする方法をお伝えしました。
- appendメソッドでリストに要素を追加
- sortメソッドでリストを並び替え
では、次回は対象ファイルが一定以上であれば古いファイルを削除する処理を追加していきましょう。
どうぞお楽しみに!
連載目次:Pythonでフォルダ内の古いファイルを自動削除するプログラム
フォルダの中にどんどんたまっていくファイルたち…。Pythonでツールを作って、ファイルの数が一定数を超えたら古い削除から自動で削除するようにしちゃいましょう。