pickle及cPickle模块

pickle 模块及其同类模块 cPickle 向 Python 提供了 pickle 支持。后者是用 C 编码的,它具有更好的性能;

pickle 模块提供了以下函数对: dumps(object) 返回一个字符串,它包含一个 pickle 格式的对象; loads(string) 返回包含在 pickle 字符串中的对象;

实例1:
#!/usr/bin/python

import cPickle as pickle

a1 = ('this is a string', 34, [2,3,4],None)

s1 = pickle.dumps(a1)
print s1

o1 = pickle.loads(s1)
print o1

print "*********************"

s11 = pickle.dumps(a1, True)
print s11

o11 = pickle.loads(s11)
print o11

输出结果为:

(S'this is a string'
p1
I34
(lp2
I2
aI3
aI4
aNtp3
.
('this is a string', 34, [2, 3, 4], None)
*********************
(Uthis is a stringqK"]q(KKKeNtq.
('this is a string', 34, [2, 3, 4], None)

输出的二进制可能有写乱码;


dump(object, file) 将对象写到文件,这个文件可以是实际的物理文件,但也可以是任何类似于文件的对象,这个对象具有 write() 方法,可以接受单个的字符串参数; load(file) 返回包含在 pickle 文件中的对象。缺省情况下, dumps() 和 dump() 使用可打印的 ASCII 表示来创建 pickle。两者都有一个 final 参数(可选),如果为 True ,则该参数指定用更快以及更小的二进制表示来创建 pickle。 loads() 和 load() 函数自动检测 pickle 是二进制格式还是文本格式。
实例2:
#!/usr/bin/python

import cPickle as pickle

a1 = 'apple'
b1 = {1: 'one', 2: 'two', 3: 'three', 4:'four'}
c1 = ['fee', 'free', 'fum']
f1 = file('t.pk1', 'wb')

pickle.dump(a1, f1, True)
pickle.dump(b1, f1, True)
pickle.dump(c1, f1, True)

f1.close()

f2 = file('t.pk1', 'rb')

a2 = pickle.load(f2)
print a2

b2 = pickle.load(f2)
print b2

c2 = pickle.load(f2)
print c2

f2.close()

输出结果:
apple
{1: 'one', 2: 'two', 3: 'three', 4: 'four'}
['fee', 'free', 'fum']

在 Python 中,变量是对象的引用。同时,也可以用多个变量引用同一个对象。经证明,Python 在用经过 pickle 的对象维护这种行为方面丝毫没有困难
实例3:
#!/usr/bin/python

import cPickle as pickle

a = [1,2,3]
b = a

print a

print "*********"

a.append(4)
print a
print b

print "*********"

c = pickle.dumps((a, b))
d,f = pickle.loads(c)

print d
print f

输出结果:
[1, 2, 3]
*********
[1, 2, 3, 4]
[1, 2, 3, 4]
*********
[1, 2, 3, 4]
[1, 2, 3, 4]

你可能感兴趣的:(python)