zoukankan      html  css  js  c++  java
  • 20180209-json&pickle&shelve模块

    什么是序列化?

      序列化就是把内存里的数据类型转成字符串,以使其能够存储到硬盘中或在网络中传输到远程,因为硬盘和网络传输时只接收bytes

    用于序列化的两个模块

      1. json,用于字符串和python数据类型间的转换

      2. pickle,用于python特有的数据类型和python数据类型间进行转换

    json模块提供了4个功能:dumps、dump、loads、load   可以跨平台

    pickle模块提供了4个功能:dumps、dump、loads、load  只能在python中使用

    json用法

    import json
    data
    = { 'role': 'Alex', 'life': 50 } # json序列化 json_str = json.dumps(data) print(json_str,type(json_str)) # 输出 # {"role": "Alex", "life": 50} <class 'str'> # json反序列化 data = json.loads(json_str) print(data,type(data)) # 输出 # {'role': 'Alex', 'life': 50} <class 'dict'>

      配合文件操作的json用法

    # 序列化配合文件操作
    with open('./tmp/json.pk','w') as fp:
        json.dump(data,fp)
    
    # 反序列化配合文件操作
    with open('tmp/json.pk') as fp:
        data = json.load(fp)
    print(data,type(data))
    # 输出
    # {'life': 50, 'role': 'Alex'} <class 'dict'>

    pickle用法 

    import pickle
    
    # pickle序列化
    pickle_str = pickle.dumps(data)
    print(pickle_str,type(pickle_str))
    # 输出
    # b'x80x03}qx00(Xx04x00x00x00lifeqx01K2Xx04x00x00x00roleqx02Xx04x00x00x00Alexqx03u.' <class 'bytes'>
    
    # pickle反序列化
    data = pickle.loads(pickle_str)
    print(data,type(data))
    # 输出
    # {'life': 50, 'role': 'Alex'} <class 'dict'>
    

      结合文件操作

    # 结合文件操作的pickle序列化
    with open('tmp/pickle.pk','wb') as fp:
        pickle.dump(data,fp)
    
    # 结合文件操作的pickle反序列化
    with open('tmp/pickle.pk','rb') as fp:
        data = pickle.load(fp)
    print(data,type(data))

      注意:pickle序列化后不是字符串,而是字节,所以在文件操作的时候,需要注意要使用 'wb' 和 'rb'

    shelve用法

    import shelve
    name
    = ['alex','sex','test'] info = {'life': 45,'age':28}
    # 序列化 s = shelve.open('tmp/shelve') s['name'] = name s['info'] = info s.close() # 反序列化 s = shelve.open('tmp/shelve') name = s['name'] info = s['info'] print('name:',name,'info:',info) s.close() # 输出 # name: ['alex', 'sex', 'test'] info: {'age': 28, 'life': 45}
  • 相关阅读:
    sublime text 怎么浏览包
    postman 中url有动态变换的值时,可以按下面方式变换。
    mac jmeter安装
    mysql 更改密码
    Jenkins启动报端口被占用,解决办法FAILED ServerConnector@2a265ea9{HTTP/1.1}{0.0.0.0:8080}: java
    ajax无法跳转页面的问题,
    EF查询性能优化相关
    code first从入门到伪精通
    自适应Bootstrap学习
    每月分享github上有意思的项目
  • 原文地址:https://www.cnblogs.com/it-q/p/8435968.html
Copyright © 2011-2022 走看看