2.常用模块二
一.什么是序列化
在我们存储数据或网络传输数据的时候,需要对我们的对象进行处理,把对象处理成方便存储和传输的数据格式,这个过程叫做序列化,不同的序列化,结果也不同,但是目的是一样的,都是为了存储和传输
在python中存在三种序列化方案
1.pickle 可以将我们python中的任意数据类型转换成bytes并写入到文件,同样也可以把文件中写好的bytes转换成我们的python的数据,这个过程叫做反序列化.
2.shelve 简单另类的一种序列化方案,有点类似后面学到的redis,可以作为一种小型的数据库来使用
3.json 将python中常见的字典,列表转换成字符串,是前后端数据交换使用频率最高的一种数据格式.
1..pickle
pickle就是把我们的python对象写入到文件中的一种解决方案,写入的是bytes,给机器看的
import pickle
class Elephant:
def __init__(self,name,weight,height):
self.name = name
self.weight = weight
self.height = height
def tiaoxi(self):
print(f"{self.name}大象特别喜欢调戏人")
e = Elephant("alex",'180T','172')
e.tiaoxi()
bs = pickle.dumps(e) #把对象进行序列化
print(bs)
bs =b'\x80\x03c__main__\nElephant\nq\x00)\x81q\x01}q\x02(X\x04\x00\x00\x00nameq\x03X\x04\x00\x00\x00alexq\x04X\x06\x00\x00\x00weightq\x05X\x04\x00\x00\x00180Tq\x06X\x06\x00\x00\x00heightq\x07X\x03\x00\x00\x00172q\x08ub.'
dx = pickle.loads(bs)
dx.tiaoxi()
e1 = Elephant("alex",'180T','172')
e2 = Elephant("wusir",'120T','167')
f = open("大象",mode = "wb")
#这也是序列化
pickle.dump(e1,f) #没有s的这个方法是把对象打散写入到文件,序列化的内容不是给人看的
pickle.dump(e2,f)
f = open("大象",mode="rb")
while 1:
try:
obj = pickle.load(f)
obj.tiaoxi()
except Exception:
break
e1 = Elephant("alex",'180T','172')
e2 = Elephant("wusir",'120T','167')
lst = [e1,e2]
pickle.dump(lst,open("大象",mode="wb"))
lst = pickle.load(open("大象",mode="rb"))
#读
for dx in lst:
dx.tiaoxi()
2.shelve
shelve提供python的持久化操作. 什么叫持久化操作呢? 说白话,就是把数据写到硬盘上. 在操作shelve的时候非常的像操作一个字典. 这个东西到后期. 就像redis差不多.
import shelve
f = shelve.open('file')
f['key'] = {'int':10, 'float':9.5, 'string':'alex'} #直接对文件句柄操作,就可以存入数据
f.close()
import shelve
f1 = shelve.open('file')
string = f1['key'] #取出数据的时候也只需要直接用key获取即可,但是如果key不存在会报错
f1.close()
print(string)
3.json
json格式
wf = { "name":"汪峰", "age":18, "hobby":"上头条", "wife":{ "name":'⼦子怡', "age":19, "hobby":["唱歌", "跳舞", "演戏"] } }
import json
dic = {"baby":None,"alex":False,"wusir":"佩奇"}
s = json.dumps(dic,ensure_ascii=False)
print(s)#{"baby": null, "alex": false, "wusir": "佩奇"}
d = json.loads('{"baby": null, "alex": false, "wusir": "佩奇"}')
print(d["alex"])
f = open("baby.json",mode="w",encoding="utf-8")
json.dump({"baby":None,"alex":False,"wusir":"佩奇"},f,ensure_ascii=False)
f = open("baby.json",mode="r",encoding="utf-8")
obj = json.load(f)
print(obj)

浙公网安备 33010602011771号