このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

タイプ数カウンターのデータをPythonで取り出す方法

タイピングの練習や日々の記録に便利な「タイプ数カウンター」。

常駐してキータイプ数を計測してくれる便利なアプリケーションですが、そのデータを直接CSVなどで出力する機能は備わっていません。

毎日のタイプ数を記録・可視化したいと思っても、公式にはエクスポート手段が提供されておらず、ログファイルの中身を直接読み取るしかないのが現状です。

そこで本記事では、Pythonを使ってタイプ数カウンターの内部データを取り出す方法をご紹介します。

タイプ数カウンターのデータはdataファイルに保存されている

タイプ数カウンターのログは基本的にバイナリ形式で保存されており、タイプ数カウンターのフォルダ内にあるdataというファイルに格納されています。(マウスの操作数はdata2ファイル)

このファイルを開いても、メモ帳などでは文字化けしてしまい、中身を直接確認することはできません。

そこでPythonを使ってこのバイナリ形式のデータを読み取っていきます。

Pythonでバイナリデータ(dataファイル)を解析する

まずは、タイプ数カウンターが出力するバイナリ形式のログファイルをPythonで読み込む基本的なコードを紹介します。

このコードでは、バイナリファイルを開き、その中身をstructモジュールを使って整数の列(タプル)に変換しています。

import struct

path = r"dataのファイルパス"

# dataファイルを開いてタプルへ変換
with open(path, "rb") as f:
    b = f.read()
    leng = len(b) // struct.calcsize("L") 
    fmt = str(leng) + "L"
    tpl = struct.unpack(fmt, b)

# タプルを順番に表示
for num, val in enumerate(tpl):
    print(num, val)

pathをタイプ数カウンターのフォルダ内にあるdataというファイルのフルパスに変更してから、実行してください。

実行すると、dataフォルダが保有している数値が順番に表示されます。

このスクリプトが行っていることは以下の通りです:

  1. open(path, "rb") で、バイナリ読み込みモードでデータファイルを開きます。
  2. struct.calcsize("L") は、1つのunsigned long型(4バイト)あたりのサイズを取得します。
  3. ファイル全体の長さから、何個のunsigned long値が格納されているかを計算します。
  4. struct.unpack() を使って、バイナリデータをそのままPythonの整数のタプルに変換します。
  5. 最後に、そのタプルの中身を1行ずつ番号付きで出力します。

最初の1~3は今日の日付になります。2025年6月8日。

かなりデータ数が多いのですが、どの数字が何の値なのかはある程度調べていくことが可能です。

今回は、主に使いたいであろう2つの値の取り出し方を説明します。

2つの値の取り出し方(今日のタイプ数、昨日のタイプ数)

import struct

#path = "dataのファイルパス"

# dataファイルを開いてタプルへ変換
with open(path,"rb") as f:
    b = f.read()
    leng = len(b)//struct.calcsize("L") 
    fmt = str(leng)+"L"
    tpl = struct.unpack(fmt,b)

print(tpl[285]) # 今日の打鍵数
print(tpl[842]) # 昨日の打鍵数

今日のタイプ数と昨日のタイプ数はサンプルコードのように、タプルの番号を指定すれば取得することができます。

日々のタイプ数を記録したいのであれば、昨日の打鍵数を記録していくのがいいと思います。

なお、今日の打鍵数については完全なリアルタイムではなく、1時間おきか30分おきに更新される仕様のため、異なる値が表示されることに気をつけてください。

Python

Posted by やろまい