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()

运行结果:

 

posted @ 2018-09-15 14:44  写的BUG代码少  阅读(131)  评论(0编辑  收藏  举报