您当前的位置:首页 > 计算机 > 编程开发 > Python

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

时间:12-26来源:作者:点击数:

Python标准库marshal可以进行对象的序列化和反序列化。

>>> import marshal

# 待序列化的对象

>>> x1 = 30

>>> x2 = 5.0

>>> x3 = [1, 2, 3]

>>> x4 = (4, 5, 6)

>>> x5 = {'a':1, 'b':2, 'c':3}

>>> x6 = {7, 8, 9}

# 把需要序列化的对象放到一个列表中

>>> x = [eval('x'+str(i)) for i in range(1,7)]

>>> x

[30, 5.0, [1, 2, 3], (4, 5, 6), {'a': 1, 'b': 2, 'c': 3}, {8, 9, 7}]

>>> with open('test.dat', 'wb') as fp:

    #先写入对象个数

    marshal.dump(len(x), fp)

    for item in x:

        # 把列表中的对象依次序列化并写入文件

        marshal.dump(item,fp)

>>> with open('test.dat', 'rb') as fp:

    # 获取对象个数

    n = marshal.load(fp)

    for i in range(n):

        # 反序列化,输出结果

        print(marshal.load(fp))

30

5.0

[1, 2, 3]

(4, 5, 6)

{'a': 1, 'b': 2, 'c': 3}

{8, 9, 7}

与pickle类似,marshal也提供了dumps()和loads()函数来实现数据的序列化和反序列化,从下面的结果可以看出,使用marshal序列化后的字节串更短一些,可以减少磁盘空间或网络带宽的占用。

>>> import marshal

>>> marshal.dumps('董付国')

b'\xf5\t\x00\x00\x00\xe8\x91\xa3\xe4\xbb\x98\xe5\x9b\xbd'

>>> marshal.loads(_)

'董付国'

>>> len(marshal.dumps('董付国'))

14

>>> import pickle

>>> len(pickle.dumps('董付国'))

19

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门