zoukankan      html  css  js  c++  java
  • Python学习之-序列化与反序列化

    1、什么是序列化与反序列化?

    # 我们把对象(或变量)从内存变成可存储或可传输的过程称之为序列化,在python中被称为picking;

    # 自定义的类的实例如何保存在一个文件中?如何从文件中读取数据,并让他们在内存中再次恢复成自己对应的类的实例?

    # 按照某种规则,把内存中的数据保存到文件中,文件是一个字节序列,所以必须要把内存数据转换成为字节序列,输出到文件,这就是序列化;反之,从文件的字节恢复到内存,就是反序列化;

    2、为什么要序列化?

    # 持久化保持状态;

    # 跨平台的数据交互;

    3、pickle

    # pickle模块是python专用的持久化模块,可以持久化包括自定义类在内的各种数据;只能在python程序之间进行数据交换

    # 方法:

    • dumps   将对象序列化成bytes对象;
    • dump    对象序列化到文件对象,就是存入文件;
    • loads    从bytes对象反序列化;
    • load      对象反序列化,从文件读取数据;

    # 注意:在使用dump()序列化时候,打开文件必须要以wb模式,使用load()反序列化,打开文件必须以rb模式;

    # 注意,序列化与反序列化必须保证使用同一套类的定义,否则会带来不可预料的结果;

    4、Json与json模块

    4.1、JSON

    # JSON:JavaScript Object Notation,JS对象标记,是一种轻量级的数据交换格式;

    # Json是跨平台语言,所以只能对python的基本数据类型进行操作,无法识别python的类;

    4.2、python与json模块

    (1)数据转换:

    (2)使用方法

    (3)记忆方法:

    # 1、序列化,数据到文件,就dump;

    # 2、反序列化,文件到数据,就load;

    # 3、根据字符串转换就加s;

    # 4、从文件直接转就不加s;

    (4)写入与读取的实例

    import json
    acc_dic={
        'id':1234,
        'password':'abc',
        'credit':15000,
        'balance':15000,
        'enroll_data':'2018-11-19',
        'expire_data':'2021-11-19',
        'pay_day':22,
        'status':0  # 0=normal,1=locked,2=disabled
    }
    
    # 写入到文件
    with open('accounts/1234.json','w') as f:
        json.dump(acc_dic,f)
    
    # 读取json文件
    with open('accounts/1234.json','r') as f:
        data=json.load(f)
        print(data,type(data))

    # 一般来说json编码的数据很少落地,数据都是通过网络传输;传输的时候,就要考虑压缩它;本质来说它就是个文本,就是字符串;

    5、MessagePack

    # MessagePack是一个基于二进制高效的对象序列化类库,可以用于跨语言通讯;

    # 它可以像JSON一样,在多种语言之间交互结构对象;但是它比JSON更快也更轻巧;兼容json和pickle;

    5.1、使用方法

    # 1、先要通过pip安装模块, pip  install msgpack-python;

    # 2、由于它是基于二进制格式,所以在dump()和load()的时候操作文件要以wb和rb模式

  • 相关阅读:
    java servlet手机app访问接口(三)高德地图云存储及检索
    java servlet手机app访问接口(二)短信验证
    java servlet手机app访问接口(一)数据加密传输验证
    java Servlet+mysql 调用带有输入参数和返回值的存储过程(原创)
    java servlet Json.org.jar
    java Servlet(续)
    [HAOI2015]树上操作
    [USACO15DEC]最大流Max Flow
    [NOI2015]软件包管理器
    [洛谷P3384]【模板】树链剖分
  • 原文地址:https://www.cnblogs.com/soulgou123/p/9829378.html
Copyright © 2011-2022 走看看