博客
关于我
python中的序列化
阅读量:583 次
发布时间:2019-03-12

本文共 1367 字,大约阅读时间需要 4 分钟。

序列化技术是将复杂的数据对象转换为简单易于存储或传输的格式的过程。这在Python中被称为pickling,在其他语言中也被称为serialization、marshalling或flattening等。序列化的过程能够有效地使对象的状态信息存储到磁盘或通过网络传输到其他机器上,而反序列化(unpickling)则是将变量内容从序列化对象中重新读取回内存。

Python中的Pickle

Python提供了一个强大的模块——pickle,用于实现对象的序列化。常见的操作包括:

  • 序列化对象并写入文件

    import pickled = dict(name="bob", age=20, scorce=88)a = pickle.dumps(d)# 输出结果为一串二进制数据print(a)

    输出结果为一堆二进制数据,文件中存储了对象的完整状态。

  • 用文件处理对象

    f = open('dump.txt', 'wb')pickle.dump(d, f)f.close()

    这种方法直接将对象序列化后写入文件,效果与pickle.dumps()相同。

  • 反序列化对象

    import pickled = dict(name="bob", age=20, scorce=88)a = pickle.dumps(d)b = pickle.loads(a)print(b)

    反序列化后,得到一个与原对象内容相同但独立的新对象。

  • JSON序列化

    为了在不同语言之间传输数据,一个更通用的选择是使用JSON(JavaScript Object Notation)。JSON格式不仅被所有现代语言支持,而且可以方便地存储到磁盘或通过网络传输。此外,JSON的语法简单,易于理解和实现。

    JSON的数据类型与Python内置类型一一对应:

    • {} 对应字典(dict)
    • [] 对应列表(list)
    • "string" 对应字符串(str)
    • 1234.56 对应数字(int或float)
    • true/false 对应布尔值(True/False)
    • null 对应空值(None)

    如何使用JSON

    Python内置的json模块提供了将Python对象转换为JSON格式的工具:

  • 序列化为JSON字符串

    import jsond = dict(name="bob", age=20, scorce=88)a = json.dumps(d)print(a)

    输出结果为一个标准JSON字符串。

  • 将JSON反序列化为Python对象

    import jsond = dict(name="bob", age=20, scorce=88)a = json.dumps(d)b = json.loads(a)print(b)

    反序列化后,得到一个与原始对象完全相同的新字典。

  • 注意事项

    使用Pickle序列化具有以下优点:

    • 灵活性: 支持大多数Python对象,甚至自定义类
    • 高效性: 加密性强,适用于敏感数据
    • 简化操作: 只需几行代码即可完成整个流程

    然而,使用Pickle的潜在问题包括:

    • 只适用于Python环境
    • 不同Python版本间的不兼容性
    • 反序列化后与原始对象是完全独立的对象

    对于跨语言数据传输,JSON是更优的选择,因为它是标准化格式且易于解析。

    转载地址:http://fluxz.baihongyu.com/

    你可能感兴趣的文章
    SpringBoot打包之后乱码
    查看>>
    因SGA分配错误无法启动数据库
    查看>>
    Oracle修改字段类型方法总结
    查看>>
    ORA-00020 超过当前最大连接数
    查看>>
    合理控制oracle数据库具有DBA权限的用户
    查看>>
    喝红茶是否会上火
    查看>>
    Android进阶解密读书笔记2——第2章:Android系统启动——第1、2小节
    查看>>
    Android进阶解密读书笔记3——第2章:Android系统启动——第3、4、5、6小节
    查看>>
    GreenDao之注解
    查看>>
    Android使用Font Awesome
    查看>>
    Execution failed for task ':app:compileDebugKotlin'
    查看>>
    主线程中Looper的轮询死循环为何没有阻塞主线程?
    查看>>
    Gradle实战四:Jenkins持续集成
    查看>>
    使用RestTemplate,显示请求信息,响应信息
    查看>>
    wgcloud运维监控系统错误:防篡改校验错误次数大于10次,不再上报数据
    查看>>
    为什么WGCLOUD安装完后,启动服务端打不开网页
    查看>>
    wgcloud网络监控出现负值
    查看>>
    ios 官方sample
    查看>>
    iOS 开发官方文档链接收集
    查看>>
    网易云面试(Android岗)之旅,差点被这些基础题绊了跟头。
    查看>>