1,序列化
序列化:
把对象打散成bytes和字符串,方便存储和传输
反序列化:
把bytes和字符串转化为对象
Python中提供的序列化方法,pickle,shelve,json
2,pickle
pickle
能把Python的任何数据类型转换成bytes类型
pickle方法
- dump ,将对象序列化成bytes,并写入文件
- load ,将bytes类型的反序列化为对象,在文件中操作
- dumps,将对象序列化成bytes
- loads ,将bytes类型的反序列化为对象
只是序列化dumps,loads
1 import pickle 2 3 class Cat: 4 def __init__(self,name,age): 5 self.name = name 6 self.age = age 7 def catchMouse(self): 8 print(self.name,self.age,"抓老鼠") 9 10 c = Cat("jerry",18) 11 12 #dumps 把对象转化成bytes, 序列化 13 bs = pickle.dumps(c) 14 15 #把bytes转换回对象 ,反序列化 16 h = pickle.loads(bs)
将序列化的东西写入文件dump,load
1 import pickle 2 3 class Cat: 4 def __init__(self,name,age): 5 self.name = name 6 self.age = age 7 def catchMouse(self): 8 print(self.name,self.age,"抓老鼠") 9 10 c = Cat("jerry",18) 11 12 #把对象转成bytes写入文件中 13 f = open("pickle.txt","wb") 14 pickle.dump(c,f) 15 16 #把文件中的bytes读出来 17 f = open("pickle.txt","rb") 18 c = pickle.load(f)
序列化一堆文件时,如果文件量不大,可以一次性写入,一次性读取,方便
1 #实例化一堆猫 2 lst = [Cat("cat1",10),Cat("cat2",10),Cat("cat3",10),Cat("cat4",10),Cat("cat5",10)] 3 4 #文件量不大的时候,一次存入 5 f = open("pickle.txt","wb") 6 pickle.dump(lst,f) 7 f.flush() 8 f.close() 9 #一次读出来 10 f = open("pickle.txt","rb") 11 j = pickle.load(f)
如果文件量大,可以分多次写入,循环多次读取,并处理异常
1 #文件量大的时候,一次一次写入 2 f = open("pickle.txt","wb") 3 for el in lst: 4 pickle.dump(el,f) 5 f.flush() 6 f.close() 7 #读的时候多次读取 8 f = open("pickle.txt","rb") 9 while 1: 10 try: 11 d = pickle.load(f) 12 print(d) 13 except EOFError as e: 14 break 15 f.close()
3,shelve模块
shelve
shelve提供Python的持久化操作,把内存的数据写到硬盘上,操作shelve的时候
非常像一个字典,更redis像
1 import shelve 2 3 #打开一个文件,像操作字典一样去操作文件 4 f = shelve.open("shelve.txt") 5 f["jay"] = "周杰伦" 6 print(f["jay"]) 7 f.close() 8 9 10 #一个字典的嵌套 11 f = shelve.open("shelve.txt") 12 f["kd"] = {"name":"杜兰特","age":30,"aihao":"喝洗澡水"} 13 print(f["kd"]["aihao"])#喝洗澡水 14 f.close() 15 16 #更改,需要加上writeback,写回文件 17 f = shelve.open("shelve.txt",writeback=True) 18 f["kd"] = {"name":"杜兰特","age":30,"aihao":"喝洗澡水"} 19 print(f["kd"]["aihao"])#喝洗澡水 20 f["kd"]["aihao"]="逛夜店" 21 print(f["kd"]["aihao"])#逛夜店 22 f.close() 23 24 #得到所有的key 25 f = shelve.open("shelve.txt") 26 f["1"] = "a" 27 f["2"] = "b" 28 f["3"] = "c" 29 f["4"] = "d" 30 31 for i in f.keys(): 32 print(i) 33 34 #得到所有的key,value 35 36 for k,v in f.items(): 37 print(k,v)
4,json模块
前后端数据交互的通用数据格式,只是将数据转换成字符串格式
处理中文要加上ensure_ascii = False
json中,使用只有两种情况,将字典,列表转换成字符串,再将字符串转换成字典,列表
1 import json 2 3 #把字典转成字符串 4 dic = {"a":1,"c":"帅奥立",&q