python学习笔记 day20 序列化模块(三)
shelve
只有一个open()方法,打开文件然后按照key操作类似字典一样的东西;
1. open()方法---打开文件,拿到一个文件句柄,操作key来对数据类型进行赋值:
import shelve f=shelve.open('info') f['key']={'a':1,'b':2} f.close() f=shelve.open('info') print(f['key'])
运行结果:
import shelve f=shelve.open('info') # 使用shelve.open(filename)拿到一个文件句柄 ,可以拿着该文件句柄进行操作其他数据类型,其实就是f['key']=要操作的数据类型,写进文件 f['key']=[(1,2),(2,3)] # f['key']后面的就是要写进文件的数据类型,这里是列表 f.close() f=shelve.open('info') print(f['key']) f.close()
运行结果:
或者当我们想要修改某一数据类型中的值,比如添加一个元素:
import shelve f=shelve.open('info') f['key']=[(1,2),(3,4),'璇璇'] # 拿着pickle.open(filename)生成的文件句柄 只要对f['key']进行赋值(某一要操作的数据类型)就可以把该数据类型写进文件 f.close() f=shelve.open('info') f['key'].append('xuanxuan') # 现在在往文件中对该数据类型的变量添加元素,再f['key']查看值,会发现该修改并不起作用 print(f['key']) # 再使用shelve.open(filename)打开一次文件,直接拿着文件句柄f['key']就可以取值
运行结果:
解决办法:当shelve.open(filename)时在open()函数中添加一个关键字参数writeback=True 就可以完成修改:
import shelve f=shelve.open('info') f['key']={'a':1,'b':2} f.close() f=shelve.open('info',writeback=True) # shelve.open(filename,writeback=True) 会生成一个文件句柄,拿着句柄操作key 比如添加元素 会完成修改 print('修改之前的数据:',f['key']) f['key']['c']=3 # 对上面的字典增加一个属性 print('修改之后的数据:',f['key']) f.close()
运行结果:
talk is cheap,show me the code