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 '''