pickle及cPickle模块
pickle 模块及其同类模块 cPickle 向Python 提供了 pickle 支持。后者是用 C 编码的,它具有更好的性能;pickle模块提供了以下函数对: dumps(object) 返回一个字符串,它包含一个 pickle 格式的对象; loads(string)返回包含在 pickle 字符串中的对象;实例1:#!/usr/bin/pythonimport
·
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]
更多推荐
已为社区贡献1条内容
所有评论(0)