タイプ数カウンターっていうのが楽しくて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。