什么是序列化?

  序列化就是把内存里的数据类型转成字符串,以使其能够存储到硬盘中或在网络中传输到远程,因为硬盘和网络传输时只接收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'\x80\x03}q\x00(X\x04\x00\x00\x00lifeq\x01K2X\x04\x00\x00\x00roleq\x02X\x04\x00\x00\x00Alexq\x03u.' <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}

最新文章

  1. 使用visualvm远程监控JVM LINUX服务器配置方法
  2. 【BZOJ 1016】【JSOI 2008】最小生成树计数
  3. OpenLayers添加点【php请求MySQL数据库返回GeoJSON数据】
  4. Webform(分页与组合查询配合使用)
  5. 多维数组问题 int (*a)[] int []
  6. Python 线程池的原理和实现及subprocess模块
  7. html的form元素
  8. Delphi下TLabel鼠标MouseEnter、MouseLeave更改颜色失灵
  9. MS SQL优化
  10. drupal7的node的内容的存储位置
  11. HttpServletRequest和ServletRequest的区别
  12. Java虚拟机JVM内存分区及代码执行机制
  13. 在Debian或Ubuntu中安装和使用&#39;搜狗输入法for linux&#39;
  14. 20190322-a标签、img标签、三列表、特殊字符实体、表格
  15. Nero8刻录引导系统光盘镜像图文教程
  16. 设计Optaplanner下实时规划服务的失败经历
  17. C语言初学者关于数组指针的深度讨论
  18. Hadoop记录-hadoop集群常见问题汇总
  19. EXCEL在改动某几个单元格时隐藏空列
  20. dell E6400笔记本 centos7 安装无线网卡

热门文章

  1. ltp-ddt eth_parallel_processing
  2. Flutter-網絡請求
  3. bzoj5118 Fib数列2 二次剩余+矩阵快速幂
  4. 前端每日实战:25# 视频演示如何用纯 CSS 创作一个慧星拖尾效果的 loader 动画
  5. web框架之初识Django
  6. 永久禁用Win10驱动程序强制签名
  7. HashMap的几种遍历方式(转载)
  8. MySql 的类型和Java的类型
  9. Codeforces 830A. Office Keys (贪心二分 or DP)
  10. Python_013(面向对象概念)