• json反序列化与pickle的用法


    json反序列化与pickle

    一、定义

    序列化:将内存中的不可持久化和传输对象转换为可方便持久化和传输对象的过程。

    反序列化:将可持久化和传输对象转换为不可持久化和传输对象的过程。

    二、 应用场景

    跨平台数据传输;
    保留上一次运行程序时对对象的修改

    三、模块和函数

    1. json

    dumps()、dump()(序列化)

    loads()、load() (反序列化)

    2. pickle

    dumps()、dump()(序列化)

    loads()、load ()(反序列化)

    
    
    dumps()与dump()的区别是dumps()只是单纯得将对象序列化,而dump()会在序列化之后将结果写入到文件当中;
    与之对应,loads()与load()区别至于loads()是对dumps的序列化结果进行反序列化,而dump()会从文件中读取内容进行反序列化。

    四、案例

    序列化
    
    info={"name":"kezi","age":22}
    f=open("test.text","w")
    f.write(str(info))
    f.close()
    
    
    反序列
    
    info={"name":"kezi","age":22}
    f=open("test.text","r")
    data=eval(f.read())
    f.close()
    print (data['age'])
    
    
    打印结果
    22
    
     
    
    
    json 简单用法
    
    import json
    
    info={"name":"kezi","age":22}
    f=open("test.text","w")
    print(json.dumps(info))
    f.write(json.dumps(info))
    #f.write(str(info))
    f.close()
    
    打印结果
    {"age": 22, "name": "kezi"}
    
     
    
    import json
    
    f=open("test.text","r")
    #data=eval(f.read())
    data=json.loads(f.read())
    f.close()
    print (data['age'])
    打印结果
    22
    
    序列化
    pickle
    
    import pickle
    def si(name):
    print("helle",name)
    info={"name":"kezi","age":22,"func":si}
    f=open("test.text","wb")
    print(pickle.dumps(info))
    f.write(pickle.dumps(info))
    #f.write(str(info))
    f.close()
    
    打印结果
    b'x80x03}qx00(Xx04x00x00x00nameqx01Xx04x00x00x00keziqx02Xx03x00x00x00ageqx03Kx16Xx04x00x00x00funcqx04c__main__
    si
    qx05u.'
    
    反序列化
    
    
    import pickle
    def si(name):
    print("helle2",name)
    f=open("test.text","rb")
    #data=eval(f.read())
    data=pickle.loads(f.read())
    f.close()
    print (data["func"]("kezi"))
    
    
    打印结果
    helle2 kezi
    None
    
    另一种简化写法
    import pickle
    def si(name):
    print("helle",name)
    info={"name":"kezi","age":22,"func":si}
    f=open("test.text","wb")
    pickle.dump(info,f) #f.write(pickle.dumps(info))
    f.close()
    
    import pickle
    def si(name):
    print("helle2",name)
    f=open("test.text","rb")
    #data=eval(f.read())
    data=pickle.load(f)#data=pickle.loads(f.read())
    f.close()
    print (data ["func"]("kezi"))

    pickle序列化结果为bites类型,只适合于Python机器之间的交互。

        json序列化结果为str类型,能够被多种语言识别,可用于与其他程序设计语言交互。
      目前,JSON格式字符串已经成为网络传输中的一种标准格式,所以在web后台开发中通常用json模块来序列化而不是pickle模块。
      JSON和Python内置的数据类型对应如下:
    JSON类型
    Python类型
    {}
    dict
    []
    list
    "string"
    'str'或u'unicode'
    1234.56
    int或float
    true/false
    True/False
    null
    None

    注:

     (1)序列化与反序列化是为了解决内存中对象的持久化与传输问题;

    (2)Python中提供了pickle和json两个模块进行序列化与反序列化;
    (3)dumps()和dump()用于序列化,loads()和load()用于反序列化;
    (4)pickle模块能序列化任何对象,序列化结果为bites类型,只适合于Python机器之间交互;
    json模块只能序列化Python基本类型,序列化结果为json格式字符串,适合不同开发语言之间交互。
    json的用法与pickle大致相同,但要注意在读写文件时json的读写模式是“w”和“b”,而不是“wb”和“rb”。
     
  • 相关阅读:
    cacti气象图调整(批量位置调整、更改生成图大小等)
    windows下安装,配置gcc编译器
    AOP技术应用和研究--OOP
    background-position 使用方法具体介绍
    iOS安全攻防(三):使用Reveal分析他人app
    textarea文本域宽度和高度(width、height)自己主动适应变化处理
    Cocos2d-X开发中国象棋《八》走棋
    div:给div加滚动栏 div的滚动栏设置
    GridView编辑删除操作
    AngularJS:实例
  • 原文地址:https://www.cnblogs.com/kezi/p/11909418.html
Copyright © 2020-2023  润新知