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)