序列化
内存中的数据结构,需要转换成字符串,才能写到磁盘。在python中,可以使用str字段将字典、列表等,转换成字符串。
把内存中的数据,转化成字符串,叫做序列化。
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。str(data)
相反,字符串转换成内内存中的数据,叫做反序列化。
- eval
执行字符串语句,特定情况下,可以实现反序列化
eval(data)
- json
import json d = json.dumps(data) #仅转换成字符串 d2 = json.loads(data) #字符串还原 f = open("test.json","w") json.dump(data,f) #转成字符并写入文件 f = open("test.json","r") data = json.load(f) #从文件载入
- dump写入文件,不能多次dump
- 支持类型str,int,tuple,list,dict
- pickle
import pickle,json # # d = {'name':'alex','age':22} # # l = [1,2,3,4,'rain'] def syahi(): print('dddd') pk = open("data.pkl","wb") #pickle只支持bytes类型写入和读取 pickle.dump(d,pk) #数据类型d存入到pk指向的文件 f = open("data.pkl","rb") d = pickle.load(f) #读取数据类型pick print(d) pickle.dumps(syahi)
pickle支持python中所有的数据类型,甚至函数也可以dumps
缺点是只能在python中使用,不能跨语言。
- shelve
当多个数据结构需要保存的时候,使用shelve。shelve是pickie的升级,pickie只能存储一个结构,但是shelve可以存储多个结构。
- 数据写入
import shelve f = shelve.open('shelve_test') f['names'] = names f['info'] = info f.close()
- 数据读取
import shelve f = shelve.open('shelve_test') print(f.get('names')) print(f.get('info')) f.update() f.close()
- 更新数据
更新数据又三种方法:
- 新建临时数据,重新按照key值给数据赋值;
- 打开的时候,配置参数writeback=True,表示更新后的数据可以写到文件中;
- 使用update方法,把数据更新到文件;
import shelve #数据更新 #创建临时数据结构,重新赋值 with shelve.open('shelve_test') as data: temp = data['names'] temp.append('123') data['names'] = temp print(data['names']) #writeback=True,更新数据到文件 with shelve.open('shelve_test', writeback=True) as data: data['names'].append('234') print(data['names']) #使用update方法更新值 with shelve.open('shelve_test') as data: data.update({'names': names}) print(data['names'])

更多精彩