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))        # 从文件读取并进行反序列化输出

  • 相关阅读:
    array and ram
    char as int
    pointer of 2d array and address
    Install SAP HANA EXPRESS on Google Cloud Platform
    Ubuntu remount hard drive
    Compile OpenSSL with Visual Studio 2019
    Install Jupyter notebook and tensorflow on Ubuntu 18.04
    Build OpenCV text(OCR) module on windows with Visual Studio 2019
    Reinstall VirtualBox 6.0 on Ubuntu 18.04
    Pitfall in std::vector<cv::Mat>
  • 原文地址:https://www.cnblogs.com/kaishirenshi/p/8776866.html
Copyright © 2011-2022 走看看