ファイルサイズを定期的に記録するPythonスクリプト
現行の進み具合を記録するために作成しました。Windowsのタスク(ってわかりにくい名前だよなあ。タスク定時実行の機能のことです)を使って、1時間おきに記録するようにしています。ファイルが大きくなれば、まあ仕事も進んでいるかな、と。
import sys import os import re import shelve import time import datetime TARGET_DIR = 'c:/home/project/web2.0' def record(): l = os.listdir(TARGET_DIR) now = datetime.datetime.now() sizes = shelve.open(filename=TARGET_DIR + '/log_record', writeback=True) for path in filter(lambda f: not re.search('(~$|.bak$|.swp$|record$)', f, re.IGNORECASE), l): s = os.stat(TARGET_DIR + '/' + path) if not path in sizes: sizes[path] = {} sizes[path][now] = s.st_size sizes.close() def dump(): sizes = shelve.open(filename=TARGET_DIR + '/log_record') dates = for path in sizes: entries = sizes[path] for d in entries: if not d in dates: dates.append(d) dates.sort(reverse=True) print 'date,', for d in dates: print str(d) + ',', print for path in sizes: print path+',', entries = sizes[path] for d in dates: if not d in sizes[path]: s = 0 else: s = sizes[path][d] print str(s) + ',', print sizes.close() def today(day): sizes = shelve.open(filename=TARGET_DIR + '/log_record') todays_first = datetime.datetime.now() latest = datetime.datetime(1900,1,1) for path in sizes: entries = sizes[path] for d in entries: if d.date() == day and d < todays_first: todays_first = d if d.date() == day and d > latest: latest = d results = for path in sizes: entries = sizes[path] if latest in sizes[path]: current = sizes[path][latest] else: current = 0 if todays_first in sizes[path]: first = sizes[path][todays_first] else: first = 0 results.append('%s %d (%d)'%(path, current, (current-first))) results.sort() for l in results: print l sizes.close() if __name__ == '__main__': if sys.argv[1] == 'dump': dump() elif sys.argv[1] == 'record': record() elif sys.argv[1] == 'today': if len(sys.argv) >= 3: y,m,d,_,_,_,_,_,_=time.strptime(sys.argv[2], '%Y/%m/%d') day = datetime.date(y,m,d) else: day = datetime.date.today() today(day) else: print 'bad command: ' + sys.argv[1]
コマンドラインから、
python log.py record
とやると、対象ディレクトリの全ファイル(バックアップなどは除く)のサイズをタイムスタンプつきで保存します。いままでの記録を表示するには、
python log.py dump
です。データは、対象ディレクトリに「log_record」というファイル名で保存されます。shelve(ということはpickle)で保存しています。
指定した日の進捗(当日の最初の記録から最後の記録の差)を表示するには、
python log.py today 2006/7/25
日付は省略すると今日になります。