• Python 序列化


    1. 序列化定义

    • 把对象(变量)从内存中变成可存储或传输的过程称之为序列化, 在Python中叫pickling,其他语言中称之为serialization等;
    • 序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上;
    • 把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling;
    # 示例一:将字典写入到文件中
    dic = str({'1':'111'})
    
    f = open('test', 'w')
    
    f.write(dic)    # 写入失败:write() argument must be str, not set
    
    
    # 示例二: 读入文件中的字典
    f.open('test', 'r')
    
    data = f.read()
    print(eval(data)['1'])    # 此处,需要将data使用 eval()函数进行转换
    

    2. JSON

    # 示例一: 序列化
    import json
    
    dic = {'name': '小虎', 'age': '19'}
    
    data = json.dumps(dic)
    f = open('JSON_text', 'w')
    f.write(data)
    f.close()
    
    # 使用 dump
    f = open('JSON_text', 'w')
    json.dump(dic, f)
    f.close()
    
    
    # 示例二: 反序列化
    import json
    
    f = open('JSON_text', 'r')
    
    data = f.read()
    data = json.loads(data)
    print(data['name'])
    
    
    # 使用 load
    f = open('JSON_text', 'r')
    
    data = json.load(f)
    print(data['name'])
    

    3. pickle

    • pickle 模块基本上功能使用和JSON模块没有太大区别;
    • pickle 不是用于多种语言间的数据传输,它仅作为python对象的持久化或python程序间进行互相传输对象的方法;
    # 示例一: 序列化
    import pickle
    
    def foo():
        print('ok')
    
    data = pickle.dumps(foo)
    
    f = open('PICKLE_text', 'wb')   # wb  write byte
    
    f.write(data)
    f.close()
    
    
    # 示例二: 反序列化
    import pickle
    
    def foo():
        print('ok')
    
    f = open('PICKLE_text', 'rb')
    
    data = f.read()
    data = pickle.loads(data)
    
    data()
    

    4. shelve 模块

    • shelve模块比pickle模块简单,只有一个open函数,返回类似字典的对象,可读可写;key必须为字符串,而值可以是
      Python所支持的数据类型。
    # 示例:
    # 序列化
    import shelve
    
    f = shelve.open(r'shelve.txt')
    
    f['info'] = {'name':'lisi', 'age': '14'}
    
    # 反序列化
    f = shelve.open('shelve.txt')
    print(f.get('info'))
    

    参考资料:

    Python 全栈

  • 相关阅读:
    idea本地安装 lombok插件
    win7系统开机启动出现蓝屏,提示BAD_SYSTEM_CONFIG_INFO
    使用mini-textbox控件时 不能获取value值
    为表格动态添加一行,miniui组件无效
    miniui表格load数据成功后,回调函数,其中setData要用如下方法
    路径1
    路径
    dubbo spring bean id冲突
    @Transactional spring 配置事务 注意事项
    Spring事务管理只对出现运行期异常进行回滚
  • 原文地址:https://www.cnblogs.com/linkworld/p/8613148.html
Copyright © 2020-2023  润新知