6.3.4 使用marshal 模块操作二进制文件

  Python 标准库 marshal 也可以进行对象的序列化和反序列化,下面的代码进行了简单演示。

 1 import marshal
 2 x1 = 30
 3 x2 = 5.0
 4 x3 = [1,2,3]
 5 x4 = (4,5,6)
 6 x5 = {'a':1,'b':2,'c':3}
 7 x6 = {7,8,9}
 8 
 9 x = [eval('x'+str(i)) for i in range(1,7)]   #把要序列化的对象放到一个列表中
10 print(x)   #[30, 5.0, [1, 2, 3], (4, 5, 6), {'b': 2, 'a': 1, 'c': 3}, {8, 9, 7}]
11 
12 #创建二进制文件
13 with open('test.dat','wb') as fp:
14     marshal.dump(len(x),fp)            #先写入对象个数
15     for item in x:
16         marshal.dump(item,fp)          #把列表中的对象依次序列化并写入文件
17 
18 #打开二进制文件
19 with open('test.dat','rb') as fp:
20     n = marshal.load(fp)               #获取对象个数
21     for i in range(n):
22         print(marshal.load(fp))        #反序列化,输出结果
23         
24 '''
25 [30, 5.0, [1, 2, 3], (4, 5, 6), {'b': 2, 'a': 1, 'c': 3}, {8, 9, 7}]
26 30
27 5.0
28 [1, 2, 3]
29 (4, 5, 6)
30 {'b': 2, 'a': 1, 'c': 3}
31 {8, 9, 7}
32 '''

 

posted @ 2018-04-10 16:11  Avention  阅读(304)  评论(0编辑  收藏  举报