The pickle
module, shown in Example 4-11, is used to serialize data—that is, convert data to and
from character strings, so that they can be stored on file or sent
over a network. It’s a bit slower than marshal
,
but it can handle class instances, shared elements, and recursive data
structures, among other things.
Example 4-11. Using the pickle Module
File: pickle-example-1.py import pickle value = ( "this is a string", [1, 2, 3, 4], ("more tuples", 1.0, 2.3, 4.5), "this is yet another string" ) data = pickle.dumps(value) # intermediate format print type(data), len(data) print "-"*50 print data print "-"*50 print pickle.loads(data)<type 'string'> 121
--------------------------------------------------
(S'this is a string'
p0
(lp1
I1
aI2
aI3
aI4
a(S'more tuples'
p2
F1.0
F2.3
F4.5
tp3
S'this is yet another string'
p4
tp5
.
--------------------------------------------------
('this is a string', [1, 2, 3, 4], ('more tuples',
1.0, 2.3, 4.5), 'this is yet another string')
On the other hand, pickle
cannot handle code
objects (but see the copy_reg
module for a way
to fix this).
By default, pickle
uses a text-based format. You can also use a
binary format, in which numbers and binary strings are stored in a
compact binary format. The binary format usually results in smaller
files. This is demonstrated in Example 4-12.
Example 4-12. Using the pickle Module in Binary Mode
File: pickle-example-2.py import pickle import math value = ( "this is a long string" * 100, [1.2345678, 2.3456789, 3.4567890] * 100 ) # text mode data = pickle.dumps(value) print type(data), len(data), pickle.loads(data) == value # binary mode data = pickle.dumps(value, 1) print type(data), len(data), pickle.loads(data) == value
Get Python Standard Library now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.