pickle使ってみた

最近PythonChallengeにほんの少し取り組んでいて,そこで
初めてPickleモジュールを使うことになったのでメモ.

pickleとは

python特有のデータ形式のことであり,
ざっくり言えばバイナリで保存するのではなく,
全部文字列にして扱いましょう,っていう感じだと思います.
いまいちよく解らんw
使っていきましょう.

とりあえず

import pickle

これは欠かせない.

pickle化する

何らかのオブジェクトをpickleにしてしまう.

# 適当にpickle化したいものを用意
sample = ['a', ('b', 'c'), 1, {2}, 3, ['tanaka'], {'hogehoge':99}]
print 'sample =', sample

次にpickle.dump()を使って保存する.

# 書き込みモードでpickle化したものを格納するファイル(.dump)を用意
f = file('hoge.dump', 'w')
# pickle化する(dump()を使う)
pickle.dump(sample, f)
f.close() # ちゃんと閉じましょう

これでpickleオブジェクトとしてsampleが保存されたことになる.

pickleオブジェクトを開く

保存したものを開くにはpickle.load()を使えば良い.

g = file('hoge.dump', 'r')
# ファイルオブジェクトに対してload()を使う
pickled_sample = pickle.load(g)
print 'pickled_sample =', pickled_sample

pickleに対する操作

特に変なことはない.至って普通に操作できる.

pickled_sample.insert(3, 'fugafuga')
print 'pickled_sample =', pickled_sample

# 上書き保存
h = file('fuga.dump', 'w')
pickle.dump(pickled_sample, h)
h.close()

ちなみに

pickleオブジェクトをfileオブジェクトとして開いてみると,

print '-----------'
x = file('hoge.dump', 'r').read()
print ''.join(x)
print '-----------'
y = file('fuga.dump', 'r').read()
print ''.join(y)

結果

上のを全部実行した結果

sample = ['a', ('b', 'c'), 1, set([2]), 3, ['tanaka'], {'hogehoge': 99}]
pickled_sample = ['a', ('b', 'c'), 1, set([2]), 3, ['tanaka'], {'hogehoge': 99}]
pickled_sample = ['a', ('b', 'c'), 1, 'fugafuga', set([2]), 3, ['tanaka'], {'hogehoge': 99}]
-----------
(lp0
S'a'
p1
a(S'b'
p2
S'c'
p3
tp4
aI1
ac__builtin__
set
p5
((lp6
I2
atp7
Rp8
aI3
a(lp9
S'tanaka'
p10
aa(dp11
S'hogehoge'
p12
I99
sa.
-----------
(lp0
S'a'
p1
a(S'b'
p2
S'c'
p3
tp4
aI1
aS'fugafuga'
p5
ac__builtin__
set
p6
((lp7
I2
atp8
Rp9
aI3
a(lp10
S'tanaka'
p11
aa(dp12
S'hogehoge'
p13
I99
sa.

なんだこれはw