day5模块学习--shelve模块

shelve模块

shelve类似于一个key-value数据库,可以很方便的用来保存Python的内存对象,其内部使用pickle来序列化数据,简单来说,使用者可以将一个列表、字典、或者用户自定义的类实例保存到shelve中,下次需要用的时候直接取出来,就是一个Python内存对象,不需要像传统数据库一样,先取出数据,然后用这些数据重新构造一遍所需要的对象。下面是简单示例:

shelve存储数据:

import shelve,datetime

  names = ["alex","tom","tenglan"]
  ages = [18,16,15]
  f = shelve.open("database")
  f["age"] = ages
  f["name"] = names
  f[‘date‘] = datetime.date.today()
  f.close()
    上面代码中,我们使用shelve打开文件并往里面写入数据,是以字典形式写入数据,句柄f相当于字典一样,往文件添加数据,就跟我们往字典中添加数据的原理是一样的,如f["age"]=ages,键值对。

shelve读取数据:

import shelve,datetime

f = shelve.open("database")
print(f.keys())
print(f.values())
print(type(f.get("name")))
print(f.get("age"))
print(f.get("date"))
f.close()
运行如下:
KeysView(<shelve.DbfilenameShelf object at 0x7f0e89a97898>)
ValuesView(<shelve.DbfilenameShelf object at 0x7f0e89a97898>)
<class ‘list‘>
[18, 16, 15]
2017-07-23

上面代码,我们把存储的数据对去出来了,可以看出,读取出来的数据类型没有改变,不是字符串,并且文件句柄就是一个字典,存储在文件句柄中一样。

shelve模块打开文件还有一个神奇的地方,就是如果这个文件不存在则创建,如果这个文件存在则读取。

这个有一个潜在的小问题,如下:

>>> import shelve
  >>> s = shelve.open("test.dat")
  >>> s["x"] = ["a","b","c"]
  >>> s["x"].append("d")
  >>> s["x"]
  [‘a‘, ‘b‘, ‘c‘]

存储的d到哪里去了呢?其实很简单,d没有写入,我们把["a","b","c"]存储到了x,当我们再次读取s["x"]的时候,s["x"]只是一个拷贝,而我们没有将拷贝写回,所以当我们再次读取s["x"]的时候,它又从源中读取了一个拷贝,所以,我们新修改的内容并不会出现在拷贝中,解决的办法就是,第一个是利用一个缓存的变量,如下所示:     >>> import shelve

>>> s = shelve.open("test.dat")
  >>> tmp = ["a","b","c"]
  >>> s["x"] = tmp
  >>> tmp.append("d")
  >>> s["x"] = tmp
  >>> s[‘x‘]
  [‘a‘, ‘b‘, ‘c‘, ‘d‘]
  s.close()

文件写进去时候是不能直接修改的,就算修改了,也要重新写进去,这就是文件的要求,不可能修改之后,文件里面直接改变。

import shelve,datetime

f = shelve.open("database")print(f.keys())print(f.values())print(type(f.get("name")))print(f.get("age"))print(f.get("date"))f.close()
时间: 2024-10-29 10:46:46

day5模块学习--shelve模块的相关文章

day5模块学习 -- os模块学习

python基础之模块之os模块 os模块 os模块的作用: os,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作,就比如说:显示当前目录下所有文件/删除某个文件/获取文件大小-- 另外,os模块不受平台限制,也就是说:当我们要在linux中显示当前命令时就要用到pwd命令,而Windows中cmd命令行下就要用到这个,额...我擦,我还真不知道,(甭管怎么着,肯定不是pwd),这时候我们使用python中os模块的os.path.abspath

Python基础(12)_python模块之sys模块、logging模块、序列化json模块、pickle模块、shelve模块

5.sys模块 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sys.maxint 最大的Int值 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操作系统平台名称 5.1 使用sys.argv进行登录判断,跳过 i/o阻塞 #使用sys.argv进行登录判断,跳过 i/o阻塞 import s

python16_day06【类、RE模块、subprocess模块、xml模块、shelve模块】

.title { background-color: #000000; color: #00f508 } 一.shelve模块 1 import shelve 2 3 # 基于pickle模块, 4 5 d = shelve.open('shelve_test') 6 7 8 class Test(object): 9 def __init__(self, n): 10 self.n = n 11 12 t1 = Test(123) 13 t2 = Test(456) 14 name = ['a

python 之 random 模块、 shutil 模块、shelve模块、 xml模块

6.12 random 模块 print(random.random()) (0,1)----float 大于0且小于1之间的小数 print(random.randint(1,3)) [1,3] 大于等于1且小于等于3之间的整数 print(random.randrange(1,3)) [1,3) 大于等于1且小于3之间的整数 print(random.choice ( [1,'23', [4,5] ] ) )   1或者23或者[4,5] print(random.sample( [1,'2

day5模块学习--hashlib模块

hashlib模块     Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示). 举个例子,你写了一篇文章,内容是一个字符串'how to use python hashlib - by Michael',并附上这篇文章的摘要是'2d73d4f15c0db7f5ecb321b6a65e5d6d'.如果有人篡改了你的文章,并发表为'ho

day5模块学习--random模块

Python中的random模块用于生成随机数 下面具体介绍random模块的功能:   1.random.random() #用于生成一个0到1的浮点数   随机浮点数:0<= n < 1.0 >>> import random >>> random.random() 0.10014889182317255 >>> random.random() 0.9318386759483899 >>> random.random(

day5模块学习--configparser模块

   使用ConfigParser模块读写ini文件(http://blog.csdn.net/linda1000/article/details/11729561) ConfigParserPython的ConfigParser Module中定义了3个类对INI文件进行操作.分别是RawConfigParser.ConfigParser.SafeConfigParser.模块所解析的ini配置文件是由多个section构成,每个section名用中括号'[]'包含,每个section下可有多

day5模块学习--shutil模块

shutil模块 高级的 文件.文件夹.压缩包 处理模块 os模块提供了对目录或者文件的新建/删除/查看文件属性,还提供了对文件以及目录的路径操作.比如说:绝对路径,父目录--  但是,os文件的操作还应该包含移动 复制  打包 压缩 解压等操作,这些os模块都没有提供. 而本文所讲的shutil则就是对os中文件操作的补充.--移动 复制  打包 压缩 解压.     1.shutil.copyfileobj(fsrc, fdst[, length]) import shutil f1 = o

python模块学习----nmap模块

安装nmap模块: pip install python_nma nmap模块说明: python-nmap是一个帮助使用nmap端口扫描器的python库.它允许轻松操纵nmap扫描结果,并且将是一个完美的选择,为需要自动完成扫描任务的系统管理员提供的工具并报告.它也支持nmap脚本输出. nmap模块类: ET:Python的轻量级XML支持 PortScanner:端口扫描 PortScannerAsync:异步进行端口扫描 PortScannerError:nmap的异常错误类 Port