社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Python小屋 • 9 年前 • 676 次点击  

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元。发送公众号消息“公众号福利”获取详细地址。


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/95eQS0IcCt
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/3058