タイプ数カウンターっていうのが楽しくて2年前くらいから使っているんだけど、
日々ログが流れていってしまうのが残念なので、カウントデータを抽出してみた。
インストールしたtypectフォルダにある「data」の中身の形式が分からんくて諦めてたんだけど、
どうやらunpackモジュールというのを使えばいいらしかったので、それで地道に。
[1]のサイトをものすごく参考にさせていただいて、それでも不明のキーを一つずつチェックして、さらに
トータル~今日~今週~昨日~先週
の順に並んでいるっぽいことを突き止めて、とかなり苦労した。
まだ不明のキー?があるけど自分のキーボードではカウントされていないキーなので知りようもなく、
とりあえず暫定版で。
参考
[1] タイプカウンタのあれ - Bulknews::Subtech - subtech
[2] バイナリデータの入力処理 - 強火で進め
[3] アルファベットのリストを作る in python - へたっぴpythonista
以下はとりあえず動くレベルの汚いソース。
同じディレクトリにタイプ数カウンターのdataファイルを置いて実行すると、test.tsvとしてカウントデータを出力。
csvじゃなくてtsvなのは趣味。
#! /usr/bin/python # -*- coding: utf-8 -*- # # extracts counts from data in typect folder. # import sys, os from struct import * # # ---------- ---------- ---------- ---------- ---------- def extractCounts(): sb = [] br = open("data", "rb") hds = ((0, "TOTAL"), (12, "TODAY"), (12, "THISWEEK"), (12, "YESTERDAY"), (12, "LASTWEEK")) skip_keys = [ (0, ("others",)), (7, ("BackSpace", "Tab")), (3, ("Enter",)), (2, ("Shift", "Ctrl", "Alt", "CapsLock", "Pause")), (6, ("Esc", "henkan", "muhenkan")), (2, ("Space", "PageUp", "PageDown", "End", "Home", "Left", "Up", "Right", "Down")), (3, ("PrintScreen", "Insert", "Del",)), (1, [str(num) for num in range(10)]), (7, [chr(i) for i in range(65, 65+26)]), (0, ("winL", "winR")), (3, ["ten"+str(num) for num in range(10)]), (0, ("ten*", "ten+")), (1, ("ten-", "ten.", "ten/")), (0, ["F"+str(num) for num in range(1, 13)]), (20, ("NumLock", "ScrollLock")), (40, (":", ";", ",", "-", ".", "/", "@")), (26, ("[", "yen", "]", "^")), (3, ("\\",)), (15, ("katakana", "HanZen",)) ] # hi = 0 for hd in hds: sum = 0 sb.extend(["# ========== ", hd[1], " ==========\n"]) for i in range(hd[0]): sbAppend(sb, br) # if hi in (0, 1, 3): if hi in (0, 3): for key in ("n_dates", "YYYY", "MM", "DD"): sbAppend(sb, br, "("+key+")") # sbAppend(sb, br, "(sum)") for hh in range(24): sbAppend(sb, br, "H"+str(hh).zfill(2)) # else: for key in ("?", "n_weeks"): sbAppend(sb, br, "("+key+")") if hi == 2: for key in ("SUNsum", "MONsum", "TUEsum", "WEDsum", "THUsum", "FRIsum", "SATsum"): sbAppend(sb, br, "("+key+")") else: sbAppend(sb, br, "(WEEKsum)") for key in ("SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"): sbAppend(sb, br, "("+key+")") # for sk in skip_keys: for i in range(sk[0]): sbAppend(sb, br) for i in range(len(sk[1])): sum += sbAppend(sb, br, sk[1][i]) print hd[1], sum hi += 1 # for i in range(12): sbAppend(sb, br) # for key in ("YYYYmost", "MMmost", "DDmost", "SUMmost"): sbAppend(sb, br, "("+key+")") # br.close() # fw = open("test.tsv", "w") fw.write("".join(sb)) fw.close() # # ---------- ---------- ---------- ---------- ---------- def sbAppend(sb, br, key=""): cnt = unpack('sb.extend([key, "\t", str(cnt), "\n"]) return cnt # test # ---------- ---------- ---------- ---------- ---------- if __name__ == "__main__": extractCounts()
日々ログを取っておきたいのであれば、これを実行するbatファイルを作って
タスクスケジューラに突っ込んでおけばおk。