设为首页 加入收藏

TOP

序列化,pickle,shelve,json,configparser(一)
2019-06-12 00:06:08 】 浏览:47
Tags:序列化 pickle shelve json configparser

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  
		
序列化,pickle,shelve,json,configparser(一) https://www.cppentry.com/bencandy.php?fid=77&id=226565

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇python 之 函数 装饰器 下一篇接口类和抽象类