zoukankan      html  css  js  c++  java
  • json & pickle

    序列化和反序列化

    序列化,把对象(数据结构) 序列化成字符串,可以存储在文件中,也就是对象的持久化

    反序列化,序列化的反向操作,把经过序列化的对象(数据结构)加载到内存

    序列化和反序列的应用及场景:

    • 对象的持久化,把内存中的对象以某种形式保存起来,比如用户在退出游戏时游戏的状态 (数据) 被保留,而不用重新来过
    • 不同的语言中传递对象并处理,典型的调用API返回一个json字符串,反序列化成Python内置的dict类型,然后可以进行相应的操作

    Python中有个两个序列化模块:josn和pickle,主要会用到它们的四个方法

    • dump        把python中的对象序列化存储到文件中
    • dumps      把python中的对象序列化
    • load          从文件中加载经过序列化的对象到内存中
    • loads        把经过序列化的对象加载到内存中

    json

    dumps

    >>> import json
    >>> raw_dict = {'key1': 'value1', 'key2': 'value2'}       # 原始dict类型(数据)
    >>> data = json.dumps(raw_dict)                           # 序列化成str
    >>> data, type(data)                                              
    ('{"key1": "value1", "key2": "value2"}', <class 'str'>) 

    loads

    >>> json.loads(data)                                 # 反序列化成内置的dict类型                       
    {'key1': 'value1', 'key2': 'value2'}

    dump

    raw_dict = {'key1': 'value1', 'key2': 'value2'}
    
    with open('save', 'w') as f:                        # 将dict类型序列化存储到save文件中           
        json.dump(obj=raw_dict, fp=f)

    序列化到save文件中的对象是这样的

    {"key1": "value1", "key2": "value2"}
    

    load

    with open('save') as f:                             # 将save文件中的数据反序列化成内置的dict类型
        raw_data = json.load(fp=f)
        print(raw_data)                                 # 输出 : {'key1': 'value1', 'key2': 'value2'}

    pickle

    python2中有个Cpickle模块是用c实现的pickle,速度比较快,在python3中已经改为了pickle

    dumps

    >>> try:
    >>>     import Cpickle as pickle
    >>> except ImportError:
    >>>     import pickle
    
    >>> raw_dict = {'key1': 'value1', 'key2': 'value2'}       # 原始dict类型(数据)
    >>> data = pickle.dumps(raw_dict)                         # 序列化成bytes类型
    >>> data
    b'x80x03}qx00(Xx04x00x00x00key1qx01Xx06x00x00x00value1qx02Xx04x00x00x00key2qx03Xx06x00x00x00value2qx04u.'

    loads

    >>> pickle.loads(data)                                   # 反序列化成内置的dict类型
    {'key1': 'value1', 'key2': 'value2'}

    dump

    with open('save.pkl', 'wb') as f:                        # 将dict类型序列化存储到文件中
        pickle.dump(obj=raw_dict, file=f)

    序列化到'save.pkl' 文件中是这样的

    8003 7d71 0028 5804 0000 006b 6579 3171
    0158 0600 0000 7661 6c75 6531 7102 5804
    0000 006b 6579 3271 0358 0600 0000 7661
    6c75 6532 7104 752e 

    load

    with open('save.pkl', 'rb') as f:                
        raw_data = pickle.load(file=f)                      # 将'save.pkl'文件中的数据反序列化成内置的dict类型
        print(raw_data)                                     # 输出: {'key1': 'value1', 'key2': 'value2'}
  • 相关阅读:
    读《少有人走的路》《第3选择》
    《谁说这辈子只能这样》の悟
    日本专利的下载方法
    08.29 JavaScript 全局对象 JSON对象
    08.28 JavaScript 边界 选择修饰符 模式单元 修饰符 正则的使用
    08.25 javascript 倒计时+正则表达式 定义 作用 定义正则表达式
    08.24 javascript 内置对象 function apply() * call() * bind() ECMA5新增
    08.23 javasript 随机数 定时函数 多次函数 单次定时 Array属性 方法 ECMA5 新增方法
    08.22 javaScript 原型的定义 原型链 获取原型 操作原型的属性 判断原型是自有的还是继承的 各种方法
    08.21 javaScript07 object 概念 创建对象 创建属性操作 方法遍历 原型
  • 原文地址:https://www.cnblogs.com/huangweimin/p/6833630.html
Copyright © 2011-2022 走看看