shelve


若只需要一个简单的存储方案,那么shelve模块可以满足你大部分的需要,你所需要的只是为它提供文件名。shelve中唯一有趣的函数是open,在调用的时候他会返回一个Shelf对象

注意:

  只需要把它当作普通字典(但是键一定要是字符串)来操作

  在操作完之后,调用它的close方法

python2.4之后的版本还有一个解决方案,将open函数的writeback参数设为True。这样所有从shelf读取或者赋值到shelf的数据结构都会保存在内存(缓存)中,而且只有在关闭shelf的时候才会回写到硬盘。

open函数参数说明

这个主要是解决这个问题:

 import shelve
s = shelve.open('data.dat','c',None,False)
s['x'] = ['a','b','c']
s['x'].append('d')
print (s['x'])

会发现 s['x']还是'a','b','c' 这是因为在s['x'].append('d') 有一个创建副本的过程,即先会提取s['x'] 的内容建立一个副本,然后会在这个副本上追加'd',但此时的变更不会同步在s['x']中。

所以解决办法阔以这样

 import shelve
s = shelve.open('data.dat','c',None,False)
s['x'] = ['a','b','c']
temp = s['x'] !
temp.append('d') !
s['x'] = temp !
print (s['x'])

这段的亮点主要在s['x'] = temp  等同于一个回写的操作,这样就把变更后的数据写入了s['x']

示例

最后有一段个人信息录入/查看程序

  *增加了在添加信息时测试是否重复的过程

 import sys,shelve
2 #储存信息
def store_person(db):
while (True):
pid = input('Enter unique ID number : ')
if pid in db.keys():
print ('find the same key : ')
else:
break person = {}
person ['name'] = input('Enter name : ')
person ['age'] = input('Enter age : ')
person ['phone'] = input('Enter phone number : ') db[pid] = person
print ('add to db done!')
#查找信息
def lookup_person(db):
pid = input('Enter ID number : ')
field = input('What would you like to know?(name,age,phone,all) : ')
field = field.strip().lower()
if field == 'all':
d = db[pid]
for key,value in d.items():
print (key,':',value)
else:
print (field.capitalize() + ':',db[pid][field])
#。。。
def print_help():
print ('help something') #获取用户输入
def enter_command():
cmd = input('Enter command(? for help) : ')
cmd = cmd.strip().lower()
return cmd def main():
database = shelve.open('date.dat')
try:
while True:
cmd = enter_command()
if cmd == 's':
store_person(database)
elif cmd == 'l':
lookup_person(database)
elif cmd == '?':
print_help()
elif cmd == 'q':
break;
finally:
database.close()
print ('stop by user') if __name__ == '__main__' : main()

Python简要标准库(3)的更多相关文章

  1. Python简要标准库(2)

    集合 堆 和 双端队列 1.集合 创建集合 s = set(range(10)) 和字典一样,集合元素的顺序是随意的,因此不能以元素的顺序作为依据编程 集合支持的运算 a = set([1,2,3]) ...

  2. Python简要标准库(1)

    sys sys这个模块让你能够访问与Python解释器联系紧密的变量和函数 其中的一些在下表 F argv 命令行参数,包括脚本名称 exit([arg]) 退出当前的程序,可选参数为给定的返回值或者 ...

  3. Python简要标准库(5)

    hashlib Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 基本的生成MD密匙的函数 import hashlib md5 = hashlib.md5() md5.up ...

  4. 【python】标准库的大致认识

    正如那句 Python 社区中很有名的话所说的:“battery included”,Python 的一大好处在于它有一套很有用的标准库(standard library).标准库是随着 Python ...

  5. python 使用标准库连接linux实现scp和执行命令

    import stat import pexpect 只显示关键代码: sqldb = localpath+database //获取database名字 if os.path.exists(sqld ...

  6. Python的标准库介绍与常用的第三方库

    Python的标准库介绍与常用的第三方库 Python的标准库: datetime:为日期和时间的处理提供了简单和复杂的方法. zlib:以下模块直接支持通用的数据打包和压缩格式:zlib,gzip, ...

  7. Python 3标准库 第十四章 应用构建模块

    Python 3标准库 The Python3 Standard Library by  Example -----------------------------------------第十四章   ...

  8. python linecache标准库基础学习

    #python标准库基础之:linecacge:高效读取文本文件#说明与作用"""可以从文件或者导入python模块获取文件,维护一个结果缓存,从而可以更高效地从相同文件 ...

  9. python StringIO标准库基础学习

    #标准库:StringIO提供类文件API文本缓冲区#作用:可以处理内存中的文本,有2种不同的实现:cStringIP版本用c编写提高速度,StringIO用python来提供可移植性,与其他字符串连 ...

随机推荐

  1. [转]Qt中ui文件的使用

    用designer设计的*.ui文件可以通过uic工具转换为*.h文件(在编译时也会自动生成这样一个ui_*.h文件),有了这个.h文件就可以直接按照纯C++的方式对其中的类进行调用.ui文件的使用就 ...

  2. Android学习笔记_18_Activity生命周期 及 跳转方式

    一.Activity有三个状态: 1.当它在屏幕前台时(位于当前任务堆栈的顶部),它是激活或运行状态.它就是响应用户操作的Activity. 2. 当它上面有另外一个Activity,使它失去了焦点但 ...

  3. 学习scala trait

      // 类接口,但是可以实现方法 // 作用 多重继承 trait traitA{ val tnum: Int def log(msg: String): Unit ={ println(" ...

  4. 前端静态文件如何应对HTTPS的到来

    近几年,越来越多的网站开始支持https,我们可以看到国外的比如github.谷歌.facebook:国内的有百度.淘宝.博客园.coding.net.worktile等一系列的网站. 我再最近的开发 ...

  5. Docker官方文档翻译2

    转载请标明出处: https://blog.csdn.net/forezp/article/details/80158062 本文出自方志朋的博客 容器 准备工作 安装Docker,版本为1.13或者 ...

  6. Oracle 反向索引(反转建索引) 理解

    一 反向索引 1.1 反向索引的定义 反向索引作为B-tree索引的一个分支,主要是在创建索引时,针对索引列的索引键值进行字节反转,进而实现分散存放到不同叶子节点块的目的. 1.2 反向索引针对的问题 ...

  7. SQL中 decode() 函数介绍

    decode() 函数的语法: Select decode(columnname,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值) From talbename Where … 其中:c ...

  8. ubuntu系统下的docker

    官网:https://www.docker.com/ 相关资料:1.Docker入门教程 http://dockone.io/article/1112.Docker_百度百科 http://baike ...

  9. jquery和vue分别对input输入框手机号码格式化(344)

    jQuery function fomatterTel(val, old) {//val: 当前input的值,old: input上次的值 var str = ""; var t ...

  10. java递归 斐波那契数列递归与非递归实现

    递归简单来说就是自己调用自己, 递归构造包括两个部分: 1.定义递归头:什么时候需要调用自身方法,如果没有头,将陷入死循环 2.递归体:调用自身方法干什么 递归是自己调用自己的方法,用条件来判断调用什 ...