Python实践99-序列化模块marshal

marshal介绍

  • 用来读写二进制文件里的Python值
  • 是和Python绑定的格式,但是独立于机器系统架构
  • 具体格式并未文档化,不同Python版本中实现可能不同
  • 并不是一般意义上的持久化模块,主要用来支持读写Pyc文件。
  • 如果想要序列化或者反序列化Python对象,最好用pickle模块,因为pickle性能更好,支持的对象类型更多。
  • dump()用来将对象写入文件
  • load()用来从文件读取值

例子

import marshal

if __name__ == '__main__':
    data1 = ['author', 100, True]
    data2 = {"name": 'Python', "Age": 30}

    # 把这些数据序列化到文件中,注:文件必须以二进制模式打开
    output_file = open("marshal.out", 'wb')
    marshal.dump(data1, output_file)
    marshal.dump(data2, output_file)
    output_file.close()

    # 从文件中读取序列化的数据
    input_file = open('marshal.out', 'rb')
    data1 = marshal.load(input_file)
    data2 = marshal.load(input_file)
    print(data1)
    print(data2)

    out_string = marshal.dumps(data1)  # marshal.dumps()返回是一个字节串,该字节串用于写入文件
    open('out.bin', 'wb').write(out_string)

    file_data = open('out.bin', 'rb').read()
    real_data = marshal.loads(file_data)
    print(real_data)

代码地址

本系列文章和代码已经作为项目归档到github,仓库地址:jumper2014/PyCodeComplete。大家觉得有帮助就请在github上star一下,你的支持是我更新的动力。什么?你没有github账号?学习Python怎么可以没有github账号呢,快去注册一个啦!