内存中的数据结构,需要转换成字符串,才能写到磁盘。在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)  #从文件载入
  1.  dump写入文件,不能多次dump
  2. 支持类型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()
  • 更新数据

更新数据又三种方法:

  1. 新建临时数据,重新按照key值给数据赋值;
  2. 打开的时候,配置参数writeback=True,表示更新后的数据可以写到文件中;
  3. 使用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'])

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄