Strings can easily be written to and read from a file. Numbers take a
bit more effort, since the read()
method only returns strings,
which will have to be passed to a function like string.atoi()
,
which takes a string like '123'
and returns its numeric value
123. However, when you want to save more complex data types like
lists, dictionaries, or class instances, things get a lot more
complicated.
Rather than have users be constantly writing and debugging code to
save complicated data types, Python provides a standard module called
pickle
. This is an amazing module that can take almost
any Python object (even some forms of Python code!), and convert it to
a string representation; this process is called pickling.
Reconstructing the object from the string representation is called
unpickling. Between pickling and unpickling, the string
representing the object may have been stored in a file or data, or
sent over a network connection to some distant machine.
If you have an object x
, and a file object f
that's been
opened for writing, the simplest way to pickle the object takes only
one line of code:
pickle.dump(x, f)To unpickle the object again, if
f
is a file object which has been
opened for reading:
x = pickle.load(f)(There are other variants of this, used when pickling many objects or when you don't want to write the pickled data to a file; consult the complete documentation for
pickle
in the Library Reference.)
pickle
is the standard way to make Python objects which can be
stored and reused by other programs or by a future invocation of the
same program; the technical term for this is a persistent
object. Because pickle
is so widely used, many authors who
write Python extensions take care to ensure that new data types such
as matrices, XXX more examples needed XXX, can be properly pickled and
unpickled.
guido@CNRI.Reston.Va.US