码迷,mamicode.com
首页 > 编程语言 > 详细

Python简要标准库(3)

时间:2016-06-08 00:21:51      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:

shelve


 

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

注意:

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

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

 

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

技术分享

open函数参数说明

 

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

1 import shelve
2 s = shelve.open(data.dat,c,None,False)
3 s[x] = [a,b,c]
4 s[x].append(d)
5 print (s[x])

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

 

所以解决办法阔以这样

1 import shelve
2 s = shelve.open(data.dat,c,None,False)
3 s[x] = [a,b,c]
4 temp = s[x]              !
5 temp.append(d)           !
6 s[x] = temp              !
7 print (s[x])

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

 

示例

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

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

 

 1 import sys,shelve
 2 #储存信息
 3 def store_person(db):
 4         while (True):
 5                 pid = input(Enter unique ID number : )
 6                 if pid in db.keys():
 7                         print (find the same key : )
 8                 else:
 9                         break
10                 
11         person = {}
12         person [name] = input(Enter name : )
13         person [age]  = input(Enter age : )
14         person [phone] = input(Enter phone number : )
15         
16         db[pid] = person
17         print (add to db done!)
18 #查找信息
19 def lookup_person(db):
20     pid = input(Enter ID number : )
21     field = input(What would you like to know?(name,age,phone,all) : )
22     field = field.strip().lower()
23     if field == all:
24         d = db[pid]
25         for key,value in d.items():
26                 print (key,:,value)
27     else:
28         print (field.capitalize() + :,db[pid][field])
29 #。。。
30 def print_help():
31     print (help something)
32 
33 #获取用户输入
34 def enter_command():
35     cmd = input(Enter command(? for help) : )
36     cmd = cmd.strip().lower()
37     return cmd
38 
39 def main():
40     database = shelve.open(date.dat)
41     try:
42         while True:
43             cmd = enter_command()
44             if cmd == s:
45                 store_person(database)
46             elif cmd == l:
47                 lookup_person(database)
48             elif cmd == ?:
49                 print_help()
50             elif cmd == q:
51                 break;
52     finally:
53             database.close()
54             print (stop by user)
55             
56 if  __name__ == __main__ : main()

 

Python简要标准库(3)

标签:

原文地址:http://www.cnblogs.com/leihui/p/5568637.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!