数据序列化:通过将对象序列化可以将其存储在变量或者文件中,可以保存当时对象的状态,实现其生命周期的延长。并且需要时可以再次将这个对象读取出来。Python中有几个常用模块可实现这一功能。
所谓的序列化其实将对象字符串化,从而可以以多种形式存储,如存储在文件中,反序列化为执行相反的操作。
json模块:用于不同语言之间的交互
用到的属性:dumpsdump loadsload
将列表形式数据序列化:
import json as j lst = ['kill','nwc','hello word','china'] lst_j = j.dumps(lst) print(lst_j) #序列化 print(lst) #原列表 print(j.loads(lst_j)) #反序列化
["kill", "nwc", "hello word", "china"]
['kill', 'nwc', 'hello word', 'china']
['kill', 'nwc', 'hello word', 'china']
import json as j lst = ['kill','nwc','hello word','china'] lst_j = j.dumps(lst) # print(lst_j) #序列化 # print(lst) #原列表 # print(j.loads(lst_j)) #反序列化 with open('d:json.txt','w',encoding= 'utf-8') as f: f.write(lst_j)
import json as j lst = ['kill','nwc','hello word','china'] with open('d:json.txt','r',encoding= 'utf-8') as f: print(j.loads(f.read())) #从文件读取反序列化 print(lst)
['kill', 'nwc', 'hello word', 'china']
['kill', 'nwc', 'hello word', 'china']
涉及到文件读写相关序列化的操作可以用loaddump代替loadsdumps
import json as j lst = ['kill','nwc','hello word','china'] with open('d:json1.txt','w',encoding= 'utf-8') as f: j.dump(lst,f) with open('d:json1.txt', 'r', encoding='utf-8') as f: print(j.load(f))
['kill', 'nwc', 'hello word', 'china']
pickle模块:用到的属性与json模块一样都为dumpdumps、loadloads,使用的方法一致,不同的是pickle模块可以序列化函数等对象,而json模块无法直接序列化函数
序列化函数
import pickle as j def func(): print('hello world!') with open('d:json3.txt','wb') as f: j.dump(func,f) #序列化函数并存储在文件中 with open('d:json3.txt','rb') as f: aa = j.load(f) #反序列化函数并赋给aa aa() #调用函数
hello world!