みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
非エンジニア&Windowsユーザー向けにPythonでお仕事に便利なツールの作り方をお伝えしています。
前回の記事はコチラでした。
指定のフォルダをZIP圧縮するツールを作ったんですね。
日付が違うと新しいZIPファイルが生成されますので、フォルダの中にどんどんZIPファイルが増えていってしまうんですね。
ですから、ある一定の数以上になったら、古い順にファイルを自動で削除てくれないかな~などと思ってしまうわけです。
と、いうことで、そんなプログラムを作ってみたいと思います。
まず、今回はPythonでファイルの作成日時・更新日時・アクセス日時を取得する方法です。
では、行ってみましょう!
フォルダ内の古いZIPファイルを削除したい
まず、お題となるフォルダは以下のような状態とします。
日付ごとにzipファイルがどんどん増えていくんで、ZIPファイルの数が3を超えたら自動で削除をしていきたいとします。
ファイルの作成日時を取得する
まず、「古い」というのをどのように判断をするか…という課題がありますよね。
パっと見ですと、ファイル名の日付部分を分解してそれで比較するという方法もありそうですが、そこはPython。実はファイルの作成日時を取得する命令が用意されています。
os.path.getctime関数です。
pathはフルパスでも良いですし、作業フォルダであればファイル名だけでもOKです。
ですから、例えば以下のようなスクリプトを作れば、「test_20170910.zip」の作成日時を知ることができます。
import os
print(os.path.getctime('test_20170910.zip'))
osモジュールが必要ですので、インポートをします。あとは、前述の書式通りに作成日時を知りたいファイルを指定すればOKですね。
実行をしますと…
1505220473.867423
なんじゃこりゃ…ってやつが出力されましたね。
エポックとは、エポック秒とは
os.path.getctime関数で取得できる日時はエポック秒と呼ばれるものです。
まず、エポックというのがありまして、Python公式ドキュメントから引用しますと、以下のようなものです。
エポック (epoch) は時刻の起点のことで、これはプラットフォーム依存です。 Unix では、エポックは (UTC で) 1970 年 1 月 1 日 0 時 0 分 0 秒です。 与えられたプラットフォームでエポックが何なのかを知るには、 time.gmtime(0) の値を見てください。
引用:16.3. time — 時刻データへのアクセスと変換 — Python 3.6.1 ドキュメント
UNIX時間とも呼ばれますね。
そして、エポック秒は、エポックからの経過した秒数のことです。
1970年から15億秒過ぎているわけですね…私、1976年生まれなので、それに近い秒数を過ごしていると考えると感慨深いものです。
エポック秒で古いファイルを判定するには
この15億秒なにがし…我々人間には結局いつなん?という感じですが、実際にファイルが新しいか、古いかを比較するためには、そんなことを知る必要はありません。
このエポック秒をわざわざ年月日形式(例えばdatetimeオブジェクトのような)に変換する必要はないんです。
というのも、エポック秒が小さければ「古い」というわけですから、そのまま比較すればOKなわけです。
ファイルの更新日時とアクセス日時を取得する
ところで、ちょっと寄り道をします。
Pythonでは、ファイルの作成日時だけでなく、アクセス日時や更新日時を取得することができます。
アクセス日時を取得するには、os.path.getatime関数で
更新日時を取得するには、os.path.getmtime関数で
取得できます。
いずれもエポック秒での取得になります。
getctime関数と合わせて覚えておくとよいですね。
まとめ
今回は、Pythonでファイルの作成日時、更新日時、アクセス日時を取得する方法をお伝えしました。
また、エポックやエポック秒についてもお伝えしました。
ファイルの作成日時もそのまんまシュパっと取得できちゃうんですね。Python、ありがたいです。
次回は、フォルダの中の指定の拡張子のファイル一覧を取得する方法をお伝えします。
どうぞお楽しみに!
連載目次:Pythonでフォルダ内の古いファイルを自動削除するプログラム
フォルダの中にどんどんたまっていくファイルたち…。Pythonでツールを作って、ファイルの数が一定数を超えたら古い削除から自動で削除するようにしちゃいましょう。