序列化模块
1. 认识序列化
1.1 什么叫序列化
数据类型 ---> 字符串的类型 叫做序列化(字符串化)
1.2 为什么要用序列化模块
数据从内存到文件 固态存储
数据在网络上传输 字节 - 自防护窜 -字典 网络传输
1.3 python中的序列化模块有哪些
json 通用的 支持的数据类型有list tuple dict
pickle python中通用的,支持几乎所有python中的数据类型
shelve py3中不是很好用,使用便捷
1.3.1 json
基于内存 dumps loads
import json dic = {"k":'v'} print(type(dic)) json_dic = json.dumps(dic) # 字典转字符串的过程 ——序列化 print(json_dic) print(dic) print(type(json_dic)) print(json.loads(json_dic)) # 字符串 转回其他数据类型 —— 反序列化
基于文件 dump load
import json dic = {"k":'v'} with open('d','w') as f: json.dump(dic,f) # dump是和文件交互的 # json.dump(dic,f) # 连续dump两次,load会报错。 with open('d') as f: print(json.load(f)) # 从文件中反序列化 # 如果要dump多条数据 # 每一条数据线dumps一下 变成字符串 然后打开文件 write写进文件里 # 读取的时候按照标志读取或者按行读 # 读出来之后 再使用loads with open('aaa','w') as f: str_dic = json.dumps(dic) f.write(str_dic+' ') f.write(str_dic+' ') f.write(str_dic+' ') f.write(str_dic+' ') with open('aaa') as f: for line in f: print(json.loads(line.strip()))
1.3.2 pickle
import pickle class A: def __init__(self,name): self.name = name alex = A('alex') print(pickle.dumps(alex)) # b'x80x03c__main__ A qx00)x81qx01}qx02Xx04x00x00x00nameqx03Xx04x00x00x00alexqx04sb.' with open('bbb','wb') as f: pickle.dump(alex,f) pickle.dump(alex,f) pickle.dump(alex,f) # pickle可以直接多次dump和load,但是load完数据之后再执行load,会报错。这里使用异常处理try:
with open('bbb','rb') as f: while True: try: obj = pickle.load(f) print(obj.name) except EOFError: break
1.pickle支持更多的数据类型
2.pickle的结果是二进制
3.pickle在和文件交互的时候可以被多次load
1.3.3 shelve
不支持多个对象同时写一个文件的操作 很少用
友情链接 :
http://www.cnblogs.com/Eva-J/articles/7228075.html#_label9