序列化与反序列化(pickle模块与json模块)

it2023-07-23  69

pickle模块

class Animal(object): def __init__(self,name,age,height): self.name = name self.age = age self.height = height def show(self): print("show",self.name,self.age,self.height) a = Animal("小白",10,140.0) # 对于对象的操作,必须借助于系统的模块实现:pickle和json import pickle """ pickle模块中提供了简单的持久化功能,可以将对象以文本的形式存储到磁盘上 Python中所有的数据类型都可以被当做对象处理 注意:通过pickle序列化之后的数据,我们无法识别,注意和乱码区分 """ """ a.将对象持久化到磁盘【对象的序列化】 pickle.dump(obj,file) obj:需要被序列化的对象,Python中任意的数据类型对应的数据都可以使用 file:表示需要操作的文件对象,注意:file必须以wb的方式打开 """ # 打开文件 f1 = open(r"animal.txt","wb") # 序列化 pickle.dump(a,f1) # 关闭文件 f1.close() """ b.将对象从磁盘上读取出来【对象的反序列化】 obj = pickle.load(file) file:表示需要操作的文件对象,注意:file必须以rb的方式打开 """ # 打开文件 f2 = open(r"animal.txt","rb") # 反序列化 result = pickle.load(f2) print(result) # 关闭文件 f2.close()

json模块

# JSON:JavaScript Object Notation,最初是在javascript语言中用于创建对象的一种字面量语法 # 作用:用于跨平台跨语言的数据交互,json本身就是纯文本,而任何语言都可以处理纯文本 """ JSON Python 表示 object dict {} array list [] string str "" '' number int/float true/false True/False null None """ import json dict1 = { "name": "中国", "province": [{ "name": "黑龙江", "cities": { "city": ["哈尔滨", "大庆"] } }, { "name": "广东", "cities": { "city": ["广州", "深圳", "珠海"] } }, { "name": "台湾", "cities": { "city": ["台北", "高雄"] } }, { "name": "新疆", "cities": { "city": ["乌鲁木齐"] } }] } print(type(dict1)) # 1.序列化 """ json.dump(obj,file):将Python对象按照json格式序列化到指定的文件对象中 json.dumps(obj):将Python对象处理成json格式的字符串 """ # r11 = json.dumps(dict1) # print(r11) # print(type(r11)) f1 = open(r"data.json","w",encoding="utf-8") json.dump(dict1,f1) f1.close() # 2.反序列化 """ json.load(file):将指定文件对象中的json数据反序列化为对象 json.loads(json_str):将字符串的内容反序列化成Python对象 """ # dict2 = {'a':[4,65,7],'b':"hello"} # print(json.dumps(dict2)) # r2 = json.loads('{"a": [4, 65, 7], "b": "hello"}') # print(r2,type(r2)) f2 = open(r"data.json","r",encoding="utf-8") r3 = json.load(f2) print(r3) print(type(r3))
最新回复(0)