Python Skelve 库
在Python中有一个简单的轻量级的类似于Key-value的存储型数据库,那就是Skelve。下面就来一起看一看这个库的简单的使用吧。
小例子
我本人比较喜欢从例子出发,然后再来研究这些内部的行为。所以下面先来看一个简单的小例子吧。
>>> def write():
... data=shelve.open(r'F:\Data.dat')
... map = {}
... map['name'] ="mark"
... map['age'] = 20
... pid ='mark'
... data[pid] = map
... data.close()
... print 'file writed success!'
...
>>> write()
file writed success!
>>> def read():
... pid='mark'
... data[pid]=shelve.open(r'F:\Data.dat')
... print "File read Success!"
...
>>> read()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in read
NameError: global name 'data' is not defined
>>> def read
File "<stdin>", line 1
def read
^
SyntaxError: invalid syntax
>>> del read
>>> def read():
... pid = 'mark'
... data = shelve.open(r'F:\Data.dat')
... print "File read Success!"
... return data[pid]
...
>>> write()
file writed success!
>>> read()
File read Success!
{'age': 20, 'name': 'mark'}
>>>
现在到电脑上的F盘看一下文件的详细的信息吧。
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0128
6470 310a 5327 6167 6527 0a70 320a 4932
300a 7353 276e 616d 6527 0a70 330a 5327
6d61 726b 270a 7034 0a73 2e01 6d61 726b
它们都是通特定的编码来实现的持久化的操作,如果我们想获取数据的话,就只能按照给定的接口来进行获取了。
浅析
先来看存储那个接口的实现吧。
>>> def write():
... data=shelve.open(r'F:\Data.dat')
... map = {}
... map['name'] ="mark"
... map['age'] = 20
... pid ='mark'
... data[pid] = map
... data.close()
... print 'file writed success!'
...
观察 : 这里主要是调用了Shelve的open接口。作用就是打开特定路径下的一个文件,这里以.dat后缀结束了。
然后我们看到了一个key的变量,对应了一个值,而另外一个value则是一个类似字典的集合。最后通过Shelve整合了起来。这就是整个流程。
原理: 这样我们就不难看出了吧。整个数据持久化的逻辑就是通过一个键值对的形式来保存的。外界通过接口来实现数据的存储。
看完了写入,接下来就是读取数据了。下面也是来研读一下代码吧。
>>> def read():
... pid='mark'
... data[pid]=shelve.open(r'F:\Data.dat')
... print "File read Success!"
...
这里更加的简单,指定的key肯定对应了指定的值。通过Skelve的接口,我们就可以获取到数据key对应的value了。接下来要怎么操作,就看自己的需求了。
小结
作为一个轻量级的数据持久化的库,Skelve并没有很高的使用价值,但是却可以高效的完成小数据的持久化过程。在某些情况下,这还是很有必要的。所以,要不要使用它,就由你来决定了。
不管你用,还是不用,Skelve都在那里。不怨不恨。
Python Skelve 库的更多相关文章
- python+paramiko库+svn写的自动化部署脚本
第一篇博文 直接开门见山的说了. 这是件什么事?:每次部署都是复制本地的文件粘贴到服务器端,因为路径复杂,所以费时且手工容易出漏洞. 一直在想有什么办法可以解决这种,因为以前在微软的一个牛人同事做过一 ...
- 安装Python算法库
安装Python算法库 主要包括用NumPy和SciPy来处理数据,用Matplotlib来实现数据可视化.为了适应处理大规模数据的需求,python在此基础上开发了Scikit-Learn机器学习算 ...
- Python标准库14 数据库 (sqlite3)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python自带一个轻量级的关系型数据库SQLite.这一数据库使用SQL语言.S ...
- 常用python机器学习库总结
开始学习Python,之后渐渐成为我学习工作中的第一辅助脚本语言,虽然开发语言是Java,但平时的很多文本数据处理任务都交给了Python.这些年来,接触和使用了很多Python工具包,特别是在文本处 ...
- [Python] 机器学习库资料汇总
声明:以下内容转载自平行宇宙. Python在科学计算领域,有两个重要的扩展模块:Numpy和Scipy.其中Numpy是一个用python实现的科学计算包.包括: 一个强大的N维数组对象Array: ...
- python常用库
本文由 伯乐在线 - 艾凌风 翻译,Namco 校稿.未经许可,禁止转载!英文出处:vinta.欢迎加入翻译组. Awesome Python ,这又是一个 Awesome XXX 系列的资源整理,由 ...
- python标准库00 学习准备
Python标准库----走马观花 python有一套很有用的标准库.标准库会随着python解释器一起安装在你的电脑上的.它是python的一个组成部分.这些标准库是python为你准备的利器,可以 ...
- Python标准库:内置函数hasattr(object, name)
Python标准库:内置函数hasattr(object, name) 本函数是用来判断对象object的属性(name表示)是否存在.如果属性(name表示)存在,则返回True,否则返回False ...
- python标准库xml.etree.ElementTree的bug
使用python生成或者解析xml的方法用的最多的可能就数python标准库xml.etree.ElementTree和lxml了,在某些环境下使用xml.etree.ElementTree更方便一些 ...
随机推荐
- 【BZOJ 2395】Time is money
题目大意有n个城市(编号从0..n-1),m条公路(双向的),从中选择n-1条边,使得任意的两个城市能够连通,一条边需要的c的费用和t的时间,定义一个方案的权值v=n-1条边的费用和*n-1条边的时间 ...
- 洛谷mNOIP模拟赛Day2-入阵曲
题目背景 pdf题面和大样例链接:http://pan.baidu.com/s/1cawM7c 密码:xgxv 丹青千秋酿,一醉解愁肠. 无悔少年枉,只愿壮志狂. 题目描述 小 F 很喜欢数学,但是到 ...
- 【bzoj4443 scoi2015】小凸玩矩阵
题目描述 小凸和小方是好朋友,小方给了小凸一个 nn × mm (n \leq m)(n≤m) 的矩阵 AA ,并且要求小凸从矩阵中选出 nn 个数,其中任意两个数都不能在同一行或者同一列.现在小凸想 ...
- ●BZOJ 3831 [Poi2014]Little Bird
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3831 题解: 单调队列优化DP 定义 F[i] 为到达第i课树的疲劳值. 显然最暴力的转移就 ...
- POJ1509 Glass Beads
Glass Beads Time Limit: 3000MS Memory Limit: 10000K Total Submissions: 4314 Accepted: 2448 Descr ...
- delphi弹出信息框大全
1. 警告信息框 MessageBox(Handle,'警告信息框','警告信息框',MB_ICONWARNING);2.疑问信息框 MessageBox(Handle,'疑问信息框','疑问信息框' ...
- Maven parent.relativePath
Maven parent.relativePath 默认值为../pom.xml 查找顺序:relativePath元素中的地址–本地仓库–远程仓库 设定一个空值将始终从仓库中获取,不从本地路径获取, ...
- Java instanceof 关键字是如何实现的?
作者:RednaxelaFX链接:https://www.zhihu.com/question/21574535/answer/18998914来源:知乎著作权归作者所有.商业转载请联系作者获得授权, ...
- RabbitMQ日志无法禁用问题
最近使用spring+rabbitmq发现其Debug日志非常多,几天就把服务器磁盘弄爆了. 原来rabbitmq依赖logback.xml输出日志. 在和log4j.properties同目录下加一 ...
- Sublime Text3时间戳查看转换插件的开发
平常配置表中,经常需要用到时间配置,比如活动开始结束.从可读性上,我们喜欢2017-04-27 17:00:00,从程序角度,我们喜欢用1493283600.前者是包含时区概念的,而后者市区无关,所以 ...