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. ROS indigo安装完成后运行小乌龟示例程序

    安装ROS成功后,在Beginner Tutorials中有一个简单的示例程序. 在Terminal中运行以下命令:$ roscore新开一个terminal,运行以下命令,打开小乌龟窗口:$ ros ...

  2. Openresty最佳案例 | 第9篇:Openresty实现的网关权限控制

    转载请标明出处: http://blog.csdn.net/forezp/article/details/78616779 本文出自方志朋的博客 简介 采用openresty 开发出的api网关有很多 ...

  3. rest_framework -- mixins&generics

    上面的mixins.generics都是rest_framework里的模块,我们可以继承其中的某些类,达到代码量减少的效果,这里充分体现出了面向对象的继承 一.mixins模块 mixins : f ...

  4. kindeditor简单使用

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

  5. 【学时总结】◆学时·IX◆ 整体二分

    ◆学时·IX◆ 整体二分 至于我怎么了解到这个算法的……只是因为发现一道题,明显的二分查找,但是时间会爆炸,被逼无奈搜题解……然后就发现了一些东西QwQ ◇ 算法概述 整体二分大概是把BFS与二分查找 ...

  6. poj_2249_Binomial Showdown

    In how many ways can you choose k elements out of n elements, not taking order into account? Write a ...

  7. jQuery的封装

    封装,最简单的效果就是一个效果你可以重复的去调用   本来前端之路时间不是很长,但是对封装还是有一点点自己个人的理解,曾经踩过的坑也不在少数,最后总结出我个人风格的封装,听一位大神指点过,每个人都有属 ...

  8. (转)Updates were rejected because the tip of your current branch is behind

    刚创建的github版本库,在push代码时出错: $ git push -u origin masterTo git@github.com:******/Demo.git ! [rejected] ...

  9. tarnado源码解析系列一

    目录 tarnado tarnado源码安装 tarnado测试程序 application类的解析 一. tarnado简介 最近在学习Python,无意间接触到的tarnado,感觉tarnado ...

  10. 转译符,re模块,random模块

    一, 转译符 1.python 中的转译符 正则表达式中的内容在Python中就是字符串 ' \n ' : \ 转移符赋予了这个n一个特殊意义,表示一个换行符 ' \ \ n' :  \ \  表示取 ...