序列化和猴子补丁
# 序列化
# 介绍
- 序列化指的是把内存中的数据类型,转换成一种特定格式的内容。
- 反序列化即是将特定格式的内容,又转换成内存中的数据类型。
# 作用
- 可将内存中的数据存储到硬盘中,可以是一种专用的格式。
- 序列化后的数据可供其他语言使用,应当是一种通用的格式。
# 格式
json
- 一种通用、能被所有语言识别的格式。pickle
- 只能被Python识别的格式。
# json模块
# 导入模块
import json
- 或者下载导入第三方包的ujson也行。
- 只能序列化通用的数据类型。
- 如: 字符串、数值、数组、字典等。
- json格式中没有单引号,且True和False都是小写。
# 序列化
json.dumps(data)
- 将数据类型转化成json格式,返回字符串。
- 例如:
-
json.dumps([1, 'a', True, False])
json.dump(data, file)
- 将内存中的数据类型转化成json格式并保存到硬盘。
- 例如:
data = [1, 'a', True, False]
with open('test.json','wt','encoding=utf-8') as f:
json.dump(data, f)
1
2
3
2
3
# 反序列化
json.loads(json_str)
- 将json格式文本转化成数据类型,返回对应的数据类型。
- 例如:
jsonstr = '[1, "a", true, false]'
a = json.loads(jsonstr)
1
2
2
json.load(file)
- 将硬盘中的json格式文件转化成内存中的数据类型。
- 例如:
with open('test.json','rt','encoding=utf-8') as f:
data = json.load(f)
1
2
2
# pickle模块
# 导入模块
import pickle
- 以序列化Python中的所有数据类型,用法与json一致。
- 如:字符串、数值、数组、字典、元组、集合等。
# 序列化
pickle.dumps()
pickle.dump()
# 反序列化
pickle.loads()
pickle.dump()
# 猴子补丁
# 介绍
- 核心思想就是用自己的代码替换所用模块的代码,可以省去修改调用函数的工作。
# 方法
- 要在第一次导入模块的位置打补丁
- 这样即便调用的其他文件又调用了那个模块,由于后续的导入都是引用第一次导入的,所以就等于全部都改了
- 如果不确定在哪个文件,就直接先在运行文件导入
- 如: start.py
- 将自己代码的函数对象,给模块的函数名
- 例如
import json
json.dumps = my_dumps
1
2
2