zoukankan      html  css  js  c++  java
  • 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”。
     
  • 相关阅读:
    Redis进阶教程aof(append only file)日志文件
    鼠标移动之hook学习
    SQL Server 2008:示例数据库安装
    接收IWebBrowser2的自动化事件
    什么是DOCTYPE 它对网页起何作用?
    Hack Attack : Install Leopard on your PC in 3 easy steps!
    How to customise the TWebBrowser user interface (part 1 of 6)
    Asp.Net 数据分页
    仿Ajax弹出半透明层 (支持IE FF)
    有关Visual Studio 2008 SP1和SQL Server 2008的一些说明
  • 原文地址:https://www.cnblogs.com/kezi/p/11909418.html
Copyright © 2011-2022 走看看