在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 库的更多相关文章

  1. python+paramiko库+svn写的自动化部署脚本

    第一篇博文 直接开门见山的说了. 这是件什么事?:每次部署都是复制本地的文件粘贴到服务器端,因为路径复杂,所以费时且手工容易出漏洞. 一直在想有什么办法可以解决这种,因为以前在微软的一个牛人同事做过一 ...

  2. 安装Python算法库

    安装Python算法库 主要包括用NumPy和SciPy来处理数据,用Matplotlib来实现数据可视化.为了适应处理大规模数据的需求,python在此基础上开发了Scikit-Learn机器学习算 ...

  3. Python标准库14 数据库 (sqlite3)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python自带一个轻量级的关系型数据库SQLite.这一数据库使用SQL语言.S ...

  4. 常用python机器学习库总结

    开始学习Python,之后渐渐成为我学习工作中的第一辅助脚本语言,虽然开发语言是Java,但平时的很多文本数据处理任务都交给了Python.这些年来,接触和使用了很多Python工具包,特别是在文本处 ...

  5. [Python] 机器学习库资料汇总

    声明:以下内容转载自平行宇宙. Python在科学计算领域,有两个重要的扩展模块:Numpy和Scipy.其中Numpy是一个用python实现的科学计算包.包括: 一个强大的N维数组对象Array: ...

  6. python常用库

    本文由 伯乐在线 - 艾凌风 翻译,Namco 校稿.未经许可,禁止转载!英文出处:vinta.欢迎加入翻译组. Awesome Python ,这又是一个 Awesome XXX 系列的资源整理,由 ...

  7. python标准库00 学习准备

    Python标准库----走马观花 python有一套很有用的标准库.标准库会随着python解释器一起安装在你的电脑上的.它是python的一个组成部分.这些标准库是python为你准备的利器,可以 ...

  8. Python标准库:内置函数hasattr(object, name)

    Python标准库:内置函数hasattr(object, name) 本函数是用来判断对象object的属性(name表示)是否存在.如果属性(name表示)存在,则返回True,否则返回False ...

  9. python标准库xml.etree.ElementTree的bug

    使用python生成或者解析xml的方法用的最多的可能就数python标准库xml.etree.ElementTree和lxml了,在某些环境下使用xml.etree.ElementTree更方便一些 ...

随机推荐

  1. 【BZOJ1026】【SCOI2009】windy数

    Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? In ...

  2. HDU5339——Untitled

    Problem Description There is an integer a and n integers b1,…,bn. After selecting some numbers from  ...

  3. *hdu 5536(字典树的运用)

    Input The first line of input contains an integer T indicating the total number of test cases. The f ...

  4. bzoj 2440 (莫比乌斯函数)

    bzoj 2440 完全平方数 题意:找出第k个不是完全平方数的正整数倍的数. 例如 4  9  16  25 36什么的 通过容斥原理,我们减去所有完全数  4有n/4个,但是36这种会被重复减去, ...

  5. [bzoj4823][Cqoi2017]老C的方块

    来自FallDream的博客,未经允许,请勿转载,谢谢. 挺有意思的一道题.... 看完题面比较明确是最小割,考虑怎么建图 想了比较久 突破口应该是题目中那张奇怪的图 观察这个奇怪的图和方块,很容易发 ...

  6. [BZOJ]4199 品酒大会(Noi2015)

    讲道理是后缀数组裸题吧,虽然知道后缀数组的原理但是小C不会写是什么鬼.. 小C趁着做这题的当儿,学习了一下后缀数组. 网络上的后缀数组模板完全看不懂怎么破,全程照着黄学长的代码抄,感觉黄学长写得还是很 ...

  7. mysql免安装版下载及配置教程

    第一步:下载 下载地址:http://dev.mysql.com/downloads/mysql/ 滚动到下方就能看到了,根据自己的需求下载: 我的电脑为64为的所以下载的为 Windows (x86 ...

  8. SQL Server2008 安装失败后的解决办法

    SQL Server2008 安装不容易成功,或许用这种方法可能会安装成功.     首先,把电脑上的SQL Server2008 卸载干净 怎么卸载干净? 1.找到控制面板-->卸载程序--& ...

  9. 使用RestTemplate访问restful服务时遇到的问题

    可以通过通过wireshark抓包,使用Postman发送请求 wireshark是非常流行的网络封包分析软件,功能十分强大.可以截取各种网络封包,显示网络封包的详细信息.使用wireshark的人必 ...

  10. Linux下常用设置文件和文件夹读写权限操作

    1.查看权限 ls -l xxx.xxx (xxx.xxx是文件名)   2.常见权限 -rw------- (600) 只有所有者才有读和写的权限 -rw-r--r-- (644) 只有所有者才有读 ...