1:序列化:简单来说就是将内存中的数据转换为字节序列保存到文件 2:反序列化:将字节序列的文件中的内容恢复到内存中
# 示例1:序列化写入文件 import pickle lst = [1,2,3,4] dicty = {‘name‘: ‘Robby‘, ‘age‘: 27} with open(file=‘test.txt‘, mode=‘wb‘) as f: pickle.dump(lst, f) pickle.dump(dicty, f) with open(file=‘test.txt‘, mode=‘rb‘) as f: for line in f: print(line) # 示例2:序列化Python对象 import pickle def add(x, y): print(x + y) class Add: def __init__(self): print(‘hello‘) serialise_obj1 = pickle.dumps(add) serialise_obj2 = pickle.dumps(Add) print(serialise_obj1) print(serialise_obj2) new_add = pickle.loads(serialise_obj1) new_Add = pickle.loads(serialise_obj2) print(new_add) print(new_Add) print(new_add(1,2)) print(new_Add()) # 示例3: 将序列化的函数写入文件,到另外一个模块中运行, 会报错,为什么? 文件1 import pickle def add(x, y): print(x + y) with open(‘test.txt‘, ‘wb‘) as f: pickle.dump(add, f) 文件2 import pickle with open(‘test.txt‘, ‘rb‘) as f: new_function = pickle.load(f) # AttributeError: Can‘t get attribute ‘add‘ on <module ‘__main__‘ from ‘/Users/yinhuanyi/Documents/XKD_Python_Course/first_chapter/other.py‘> 文件2修改 def add(x, y): print(x + y) import pickle with open(‘test.txt‘, ‘rb‘) as f: new_function = pickle.load(f) new_function(1,2)
# json 跨语言的序列化方式,用于存储和展示数据 { "name": "中国", "province": [{ "name": "黑龙江", "cities": { "city": ["哈尔滨", "大庆"] } }, { "name": "广东", "cities": { "city": ["广州", "深圳", "珠海"] } }, { "name": "台湾", "cities": { "city": ["台北", "高雄"] } }, { "name": "新疆", "cities": { "city": ["乌鲁木齐"] } }] } # python 与 json对象的转化 import json dictionary = { ‘name‘: ‘Robby‘, ‘age‘: 27 } json_obj = json.dumps(dictionary) print(json_obj) new_dict = json.loads(json_obj) print(new_dict) # json.dump()和json.load() 是将json对象保存到文件
# 需要先安装 pip install msgpack-python # 示例 import msgpack dictionary = { ‘name‘: ‘Robby‘, ‘age‘: 27 } msgpack_obj = msgpack.packb(dictionary) print(msgpack_obj) new_dictionary = msgpack.unpackb(msgpack_obj, ) print(new_dictionary) print(type(new_dictionary))
序列化:将内存中的数据转换为字节序列保存到文件;
反序列化:将字节序列的文件中的内容恢复到内存中;
(1)如何序列化写入文件:
导入pickle模块;
初始化数据结构;
通过with open
上下文管理器的方式打开文件(文件操作模式为只写二进制模式);
然后使用pickle模块中的dump方法对数据结构序列化,并且将之写入文件;
(2)读取文件序列化内容
通过with open
上下文管理器的方式打开文件(文件操作模式为只读二进制模式);
使用pickle模块的load方法将文件内序列化好的对象加载到内存中,将之还原;
(3)序列化Python对象
dumps方法
:直接序列化Python对象,对象序列化后以 bytes 对象返回,不写入文件;
loads方法
:直接把序列化好对象进行还原,并返回其重组后的对象;
(4)序列化函数还原
将序列化的函数写入文件,到另外一个模块中运行, 必须先在当前这模块声明这个函数;
因为序列化还原只会还原函数名,函数对象的语句块不会序列化;
JSON是一种轻量级的数据交换格式;
使用 JSON 函数需要导入 json 模块;
json.dumps
:用于将 Python 对象编码成 JSON 字符串;
json.loads
:用于将已编码的 JSON 字符串解码为 Python 对象,该函数返回 Python 字段的数据类型;
是一个基于二进制高效的对象化序列类库,可用于跨语言通信;
首先需要在项目中安装msgpack模块:Pip install msgpack-python
,然后再导入使用;
packb
:将对象序列化成一个二进制对象;
unpackb
:将对象还原;
原文:https://www.cnblogs.com/zhongguiyao/p/14872049.html