pickleマジ便利 あとipythonの初期化ファイルにいろいろ記述して便利に
[twitter:@clavicle]が便利だと言っていたので、ふと思い出して使ってみた。
import pickle dic = {"a":3} pickle.dump(dic,open("hoge.dump","w")) #オブジェクトをシリアライズして保存 dic2 = pickle.load(open("hoge.dump")) #オブジェクトをデシリアライズしてロード print dic2 # {"a":3}として元のオブジェクトの状態が再現される
詳細: 3.14.4 何を pickle 化したり unpickle 化できるのか?
以下の型は pickle 化できます:
None、 True、および False
整数、長整数、浮動小数点数、複素数
通常文字列および Unicode 文字列
pickle 化可能なオブジェクトからなるタプル、リスト、集合および辞書
モジュールのトップレベルで定義されている関数
モジュールのトップレベルで定義されている組込み関数
モジュールのトップレベルで定義されているクラス
__dict__ または __setstate__() を pickle 化できる上記クラスのインスタンス
普通のオブジェクトなら大丈夫だそうです。
iPythonの初期化ファイルをいじって使いやすく
IPython - Numerical Analysis with Python
iPython便利すぎて、僕はだいたいzshとiPythonの中で生活してるんですが、よく使うものなので関数を追加して便利にしておきたい。
で、今挙げたPickleを適当にラップして簡単に呼び出せるようにしておきます。(既に十分簡単なんですけどね...)
~/.ipython/ipythonrcに次の記述を追加
.. execfile ~/.pyrc
これでiPython起動時に ~/.pyrcが評価されるようになります
うちの ~/.pyrc はこんな感じ
一部 seeモジュール や PyObjC(AppKit) に依存してます
# -*- encoding:utf-8 -*- import os,sys,re from see import see import pdb import pickle from AppKit import NSSound import subprocess q=quit def psave(fname,obj): pickle.dump(obj,open(fname,"w")) def pload(fname): return pickle.load(open(fname)) def playsound(fname): sound = NSSound.alloc() sound.initWithContentsOfFile_byReference_(fname, True) sound.play() while True: if not sound.isPlaying():break def getClipboard(): p = subprocess.Popen(['pbpaste'], stdout=subprocess.PIPE) retcode = p.wait() data = p.stdout.read() return data def setClipboard(data): p = subprocess.Popen(['pbcopy'], stdin=subprocess.PIPE) p.stdin.write(data) p.stdin.close() retcode = p.wait()
よく使うものほど短い名前でホゲホゲ
今思ったんだけど .pycにしてしたほうiPython起動時のオーバーヘッド減るかも。