91
66

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pythonでコマンドラインからpickleの中身を確認する

Last updated at Posted at 2017-03-21

tl;dr

課題

Pythonで様々なオブジェクトをpickleという形式でシリアライズすることができます。一方で、jsonファイルやテキストファイルと違いバイナリファイルとなるため、catやlessで容易に確認することができず、いちいちpythonのインタプリタでwith句を書いて中身を取り出す必要があると思っていました。

# 書き込み
with open("hoge.pkl", mode="wb") as f:
    pickle.dump({"hoge":"fuga"}, f)

# 読み込み
with open("hoge.pkl", mode="rb") as f:
    hoge = pickle.load(f)

ちなみに、上記のhoge.pklをcatで表示すると以下のようになります。

$ cat hoge.pkl
?}qXhogeqXfugaqs.%

解決法:シェルから直にpickleの中身を確認する

しかし、pythonのコマンドで直にpickleの中身を確認することができる方法がありました。それがpython -m pickleというコマンドです。-mというオプションはPythonの標準モジュールを実行してくれるため、pickleを指定するとその読み込み結果を表示してくれます。python -m SimpleHTTPServerpython -m http.serverでWebサーバが立ち上がるのと同じ仕組みですね。

上のpythonコードで作成したhoge.pklというファイルがあった場合に、以下のようにして中身を表示させることができます。

$ python -m pickle hoge.pkl
{'hoge': 'fuga'}

また、オブジェクトの場合は以下のように表示されます。

$ python -m pickle dictionary.pkl
<gensim.corpora.dictionary.Dictionary object at 0x104e7ac51>

シェルのエイリアスに登録する

これだけでも個人的には大発見でpickleを積極的に利用できる理由になるほど便利なのですが、いちいちpython -m pickleとタイプするのは大変なので、シェルの機能でaliasを設定してみます。

bash/zshの場合、以下のようになります。pickleはPythonのバージョンで非互換なので、python2/python3を明示的に指定したい場合は、絶対パスでpythonを指定しておいた方が良いでしょう。


alias pcat='python -m pickle'

こうすることによって、$ pcat hoge.pklというコマンドで簡単にpickleファイルの中身を確認することができます。

参考

91
66
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
91
66

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?