2015年07月19日

ipythonのhistoryの中身をdumpしたい

「あれ、この前書いたソースコードどこやったっけ……。あー、そういえばipythonで書いてどこにも書き写してないや」みたいな時に、ipythonのhistoryをまとめ読みしたくなることってありますよね。

historyコマンドだと一度セッションを終了すると以前のセッションは出てこない。でもhistoryファイルには前セッションの内容も残っている。セッションをまたいでhistoryを取る方法もありそうな気がするけど、さらっと検索した限りだと見当たらなかったので、historyファイルを参照することにしてみる。

ipythonのhistoryファイルは下記。profileを自作している場合は、profile_${profile_name}になる。

~/.ipython/profile_default/history.sqlite

sqliteを使ってらっしゃる。これでは中身をエディタで見ることが出来ない。(平文で入ってるのでまったく見られないわけではないけど)

これをdumpすれば良いよね。ということでまずsqlite3が入ってなければ入れる。

$ sudo apt-get install sqlite3

ファイルを指定して実行。

$ sqlite3 ~/.ipython/profile_default/history.sqlite

.tables で確認すると、historyというテーブルがいるようだ。schemaを見てみる。

.schema history
CREATE TABLE history
                (session integer, line integer, source text, source_raw text,
                PRIMARY KEY (session, line));

sourceというカラムの中にコマンドがテキスト形式で入っているので、それを取り出せば良いようだ。

じゃ、こんな感じで出力すれば良いよね。

sqlite3 ~/.ipython/profile_default/history.sqlite "select source from history;" > history.txt

実行したら6000行くらいいろいろと思い出が蘇るコードが出力された。