zoukankan      html  css  js  c++  java
  • python中序列化json模块和pickle模块

    内置模块和第三方模块

    json模块和pickle 模块(序列化模块)

    1. 什么是序列化?

      序列化就是将内粗这种的数据类型转成另一种格式

      序列化:字典类型——>序列化——>其他格式——>存入硬盘(存)

      反序列化:硬盘——>读取——>其他格式——>反序列化——>字典(取)

    2. 为什么要序列化?

      1.长久保存程序的运行状态

      2.数据的跨平台交互

    3. 如何序列化

      json:

      优点:这种是一种通用的格式,所有编程语言识别

      缺点:不能识别所有python类型

      pickle:

      优点:能识别所有python数据类型

      缺点:序列化后的格式只能被python语言识别

    #json 格式(不支持python的元组和集合类型,set 	uple)
    import json  #序列化
    dic = {'k1': True, 'k2': 11, 'k3': 'ming'}
    ​
    ​
    dic_json = json.dumps(dic)
    print(dic_json, type(dic_json))
    #运行结果
    {"k1": true, "k2": 11, "k3": "ming"} <class 'str'>
    #运行后的结果是一段在python中的字符串,已经序列化
    with open('a.json', mode='wt', encoding='utf-8')as f:
        f.write(dic_json)  #将序列化为json格式的数据类型写入硬盘(持久化)
    #读取时候只需要反序列化即可
    with open('a.json', mode='rt', encoding='utf-8')as f:
        dic_json = f.read()
        dic = json.loads(dic_json)
        print(dic, dic['k1'])
     #运行结果
    {'k1': True, 'k2': 11, 'k3': 'ming'} True
    #该过程就是一个反序列化读取过程
    ​
    ​
    #当然上述代码还可以精简
    import json
    dic = {'k1': True, 'k2': 11, 'k3': 'ming'}
    with open('b.json', mode='wt')as f:
         json.dump(dic, f)  #序列化加持久化括号传入参数为字典,f
         #注意dump与dumps的区别   
            
    #反序列化  
    with open('b.json', mode='rt', encoding='utf-8')as f :
        d = json.load(f)  #注意load和loads的区别
        print(d, d['k2'])
    #运行结果
    {'k1': True, 'k2': 11, 'k3': 'ming'} 11

     

    #pickle 格式(支持所有的python数据类型,但是只能被python语言接收)
    import pickle            #二进制的序列化
    s = {1, 2, 'ming', 5}    #这是一个json不支持序列化的集合类型
    s_pkl = pickle.dumps(s)  #pickle序列化操作
    print(s_pkl, type(s_pkl))
    with open('c.pkl', mode='wb') as f:  #进行持久化操作,写入硬盘
        f.write(s_pkl)
    运行结果
    b'x80x03cbuiltins
    set
    qx00]qx01(Kx01Kx02Xx04x00x00x00mingqx02Kx05ex85qx03Rqx04.' <class 'bytes'>
    ​
    with open('c.pkl', mode='rb')as f:    #反序列化操作(读取)
        s_pkl = f.read()
        s = pickle.loads(s_pkl)
        print(s, type(s))
    运行结果
    {1, 2, 'ming', 5} <class 'set'>#同样用dump和load的方法也更为简洁
    dic = {'k1': True, 'k2': 11, 'k3': 'ming', 'k4': '你好啊'}
    with open('d.pkl', mode='wb')as f:    #pickle 序列化和持久化
        dic_pkl = pickle.dump(dic, f)
        print(dic_pkl)
    with open('d.pkl', mode='rb')as f:    #反序列化
        dic = pickle.load(f)
        print(dic, type(dic), dic['k4'])
    ​
    #输出结果
    None
    {'k1': True, 'k2': 11, 'k3': 'ming', 'k4': '你好啊'} <class 'dict'> 你好啊

     

  • 相关阅读:
    转 SpringCloud服务注册中心比较:Consul vs Zookeeper vs Etcd vs Eureka
    转 微服务的4个设计原则和19个解决方案
    骑士问题
    种树(洛谷P1250)
    你的飞碟在这儿(洛谷P1200)
    Hello world
    [zt][cocos2dxwin32] 安装部署流程整理
    (ZT)关于IAP防止破解的几点
    (ZT)UIImage应用与内存管理
    在Mac上发布QT的程序
  • 原文地址:https://www.cnblogs.com/5j421/p/10071568.html
Copyright © 2011-2022 走看看