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

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

-------我是分割线----------

相关阅读:

Python+pickle读写二进制文件小案例

Python+shelve读写二进制文件

Python使用JSON序列化从入门到精通

--------我是分割线-----------

2017年8月15日赠送公众号福利一波:我在CSDN上的Python视频课程,“Python可以这样学(第一季)”,共96课,约24小时,原价99元,2017年8月15日9:00——18:00特价9元。发送公众号消息“公众号福利”获取详细地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dongfuguo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值