zoukankan      html  css  js  c++  java
  • python中的json和pickle

    author:headsen chen

    date::2018-04-10  09:56:54

    json模块和pickle模块:

    这是用于序列化的两个模块:

    概念介绍:
    json和pickle模块是将数据进行序列化处理,并进行网络传输或存入硬盘。
    json: 用于字符串和python数据类型间进行转换(适用于python和其他语言之间进行类型转换)
    pickle: 用于python特有的类型和python的数据类型间进行转换

    json:模块提供了四个功能:dumps dump loads load
    pickle:模块提供了四个功能:dumps dump loads load

    使用方法:
    使用前先导入该模块
    import json
    import pickle


    总结区别:

    pickcle和json的使用只有一点不一样:pickle使用的rb和wb模式,json使用的r和w模式,其余使用方法上一样的。
    ........................功能上:pickle用于python内部各种数据类型的转换,json用于python和其他语言之间的数据类型的转换和交换。
    ........................使用范围上:pickle可以序列化所有的数据类型包括类、函数,json只能序列化最基本的数据类型。

    python2可以dump多次,load多次,2个次数都是一一对应的
    python3只能dump多次,loads、load一次


    自己试验的实例:

    pickle  ==========================================================================

    例1:pickle 内存对象的序列化(python3.0版本)

    import pickle
    d = {"k1":'123',"k2":'456'}
    e = pickle.dumps(d)
    print(e)
    -----> 运行后生成了只有python才认识的特定的字符串

    b'x80x03}qx00(Xx02x00x00x00k1qx01Xx03x00x00x00123qx02Xx02x00x00x00k2qx03Xx03x00x00x00456qx04u.'


    例2:pickle序列化在python2.0版本里:
    #[root@nginx1 python]# python
    Python 2.7.5 (default, Nov 6 2016, 00:28:07)

    >>> import pickle
    >>> d ={"k1": '123', "k2": "hello"}
    >>> p_str = pickle.dumps(d)
    >>> print( p_str)
    (dp0
    S'k2'
    p1
    S'hello'
    p2
    sS'k1'
    p3
    S'123'
    p4
    s.
    >>>

    例3:将已经生成的序列化的e,进行反转(反序列化)

    import pickle
    d = {"k1":'123',"k2":'456'}
    e = pickle.dumps(d)
    f = pickle.loads(e)
    print(f)

    ----->
    {'k1': '123', 'k2': '456'}

     

    例4:将序列化后的数据写入到文件中

    import pickle
    d ={"k1": '123', "k2": "hello"}
    with open('ss','wb') as jp:
         pickle.dump(d,jp)

    运行后自动生成序列化的ss文件:
    打开ss文件:

    �}q (X k1qX 123qX k2qX helloqu. (只有python才认识的某种类型文件)

    将ss文件反转(反序列化操作)


    例5:将上述ss文件进行反转(反序列化)

    import pickle
    with open('ss','rb') as jp: #同样读取的时候也需要打开文件
    e=pickle.load(jp)
    print(e)
    ---->
    {'k1': '123', 'k2': 'hello'} -----------> 发现和上文的d一模一样


    json ==================================================================================
    json的序列化和反序列化:

    例6:内存对象的序列化和反序列化:
    import json
    d = {"k1":'123',"k2":'456'}
    e = json.dumps(d)
    f = json.loads(e)
    print(d,type(d))
    print(e,type(e))
    print(f,type(f))

     ------->

    {'k1': '123', 'k2': '456'} <class 'dict'>
    {"k1": "123", "k2": "456"} <class 'str'>
    {'k1': '123', 'k2': '456'} <class 'dict'>


    例7:文件的序列化和反序列化:

    import json
    d = {"k1":'123',"k2":'456'}
    with open('kk','w') as jp:
        json.dump(d,jp)

    运行后生成kk 的文件,文件内容:
    {"k1": "123", "k2": "456"}


    将生成的kk文件进行反序列化:
    import json
    with open('kk','r') as jp:        #同样读取的时候也需要打开文件
    d=json.load(jp)
    print(d,type(d))

    ------>

    {'k1': '123', 'k2': '456'} <class 'dict'>


    =======================================================================================================

    例8:json模块总体的总结:

    JSON在python中分别由list和dict组成。

    import json
    s={1:1,2:2,3:3}
    sjson=json.dumps(s)     # 将s进行序列化
    s1=json.loads(sjson)         # 将sjson进行反序列化

    with open(filename,format)as f:
         json.dump(s,f)           # 将s进行序列化并存入文件中
    with open(filename)as f:
         for line in f.readlines():
    print(json.loads(line))        # 从文件读取并进行反序列化输出

  • 相关阅读:
    出现socket:(10107)系统调用失败
    JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
    获取滚动条距离底部的距离
    linux常用命令使用方法
    Python:一
    【C++ Primer 第15章】定义派生类拷贝构造函数、赋值运算符
    【【C++ Primer 第15章】 虚析构函数
    ubuntu基本用法
    深度优先搜索(DFS)和广度优先搜索(BFS)
    【C++ Primer 第7章】定义抽象数据类型
  • 原文地址:https://www.cnblogs.com/kaishirenshi/p/8776866.html
Copyright © 2011-2022 走看看