zoukankan      html  css  js  c++  java
  • python 序列化 json, pickle

    什么是序列化(Serialization):

    序列化是将对象的状态信息转化为可以存储和传输的形式的过程。

    序列化之后可以把序列化后的内容写入磁盘或者通过网络传输到其他机器

    反过来,把变量内容从序列化的对象重新读到内存里的过程叫反序列化

    什么是Json:

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。Json采用完全独立于语言的文本格式,但是也使用了类似C语言的家族习惯(例如C,C++,C#,Java,JavaScript,Perl,Python等),这些特性,使Json成为理想的交换语言。一般处理简单的数据对象, 主要进行各个语言间的数据交互

    json.dumps(obj) # 将python 对象保存为Json格式

    json.dump(obj,file) # 将python 对象直接转换为Json格式并保存在file中

    json.loads(obj) #将json 格式转化为python对象

    json.load(obj.file) #从file中将obj 转化为python对象

    对于简单数据类型的encoding 和 decoding:

    ###encoding
    
    >>> import json
    >>> obj=[[1,2,3],('a','b','c'),{'4':5,'6':7},'def']
    >>> encoding_json=json.dumps(obj)
    >>> print(encoding_json)
    [[1, 2, 3], ["a", "b", "c"], {"4": 5, "6": 7}, "def"] #注意这里元组转化为列表
    >>> print(repr(obj))
    [[1, 2, 3], ('a', 'b', 'c'), {'4': 5, '6': 7}, 'def']  #这里只是转化为字符串

    >>> json.dumps({'b':4,'a':5,'e':6})
    '{"a": 5, "b": 4, "e": 6}'
    >>> json.dumps({'b':4,'a':5,'e':6},sort_keys=True)
    '{"a": 5, "b": 4, "e": 6}'
    >>> a = json.dumps({'b':4,'a':5,'e':6},sort_keys=True,indent=5)#indent指明缩进为5
    >>> print(a)
    {
         "a": 5,
         "b": 4,
         "e": 6
    }

    在Json的编码过程中,会存在从Python数据类型向Json类型的转化。

    Python Json
    dict object
    list,tuple array
    str string
    int,float number
    True true
    False false
    None null
    ## decode
    >>> encoding_json
    '[[1, 2, 3], ["a", "b", "c"], {"4": 5, "6": 7}, "def"]'
    >>> decoding_json=json.loads(encoding_json)
    >>> print(decoding_json)
    [[1, 2, 3], ['a', 'b', 'c'], {'4': 5, '6': 7}, 'def']
    >>> type(decoding_json)
    <class 'list'>
    >>> print(decoding_json[2]['4'])
    5

    从Json到Python的数据类型转化对照如下:

    JSON Python
    object dict
    array list
    string unicode
    number int,long
    ture True
    false False
    null None

    Pickle 可以处理较为复杂的数据类型, 比如函数. pickle 模块对于python序列化和反序列化执行二进制协议。pickle 仅仅是python的一个

    序列化对象,仅对python有用。

    Comparison with Json

    1. JSON is a text serialization format, while pickle is a binary serialization format;

    2. JSON is human-readable, while pickle is not;

    3. JSOn is interoperable and widely used outside of the Python ecosystem, while pickle is Python-specific;

    Pickcle, Json 两者共同的用法 dumps/loads/dump/load

    Pickcle.dump(obj,file.[protocol])

    序列化对象,并将结果数据流写入到文件 对象中,参数protocol是序列化模式,默认值为0,表示以文本的形式序列化。

    protocol的值还可以是1或2,表示以二进制的形式序列化。

    pickle.load(file)

    反序列化对象,将文件中的数据解析为一个python对象。

    eg: 序列化

    # encoding
    
    import pickle
    
    data = {
        'a':[1,2,0,3],
        'b':('string',u'unicode string'),
        'c': {None,True,False}
    }
    
    with open('data.pickle','wb') as f:
        # pickcle the 'data' dictionary using the higheset protocol available.
        pickle.dump(data,f,pickle.HIGHEST_PROTOCOL)

    反序列化:

    #! /webapp/python/python3/bin/python3
    import pickle
    
    with open('data.pickle','rb') as f:
        data = pickle.load(f)
        print(data)
        for key in data:
            print(key,'--->',data[key])
    
    #结果
    {'a': [1, 2, 0, 3], 'b': ('string', 'unicode string'), 'c': {False, True, None}}
    a ---> [1, 2, 0, 3]
    b ---> ('string', 'unicode string')
    c ---> {False, True, None}
  • 相关阅读:
    分享一个详情页
    ES6初探,变量的声明
    ES6初探,什么是ES6
    提问回顾
    个人阅读&个人总结
    结对项目-数独程序扩展
    个人作业Week3-案例分析
    个人作业Week2-代码复审
    个人作业1
    【个人项目】数独
  • 原文地址:https://www.cnblogs.com/frankb/p/7414253.html
Copyright © 2011-2022 走看看