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更方便一些 ...
随机推荐
- 洛谷P2405 non天平
题目背景 non最近正在为自己的体重而苦恼,他想称量自己的体重.于是,他找来一个天平与许多砝码. 题目描述 砝码的重量均是n的幂次,n^1.n^2.n^3.n^4.n^5的……non想知道至少要多少个 ...
- ●UVA 10652 Board Wrapping
题链: https://vjudge.net/problem/UVA-10652 题解: 计算几何,Andrew求凸包, 裸题...(数组开小了,还整了半天...) 代码: #include<c ...
- UVA12186
给出一个树状关系图,公司里只有一个老板编号为0,其他人员从1开始编号.除了老板,每个人都有一个直接上司,没有下属的员工成为工人. 工人们想写一份加工资的请愿书,只有当不少于员工的所有下属的T%人递交请 ...
- [bzoj4821][Sdoi2017]相关分析
来自FallDream的博客,未经允许,请勿转载,谢谢. Frank对天文学非常感兴趣,他经常用望远镜看星星,同时记录下它们的信息,比如亮度.颜色等等,进而估算出星星的距离,半径等等.Frank不仅喜 ...
- ubuntu linux c学习笔记----共享内存(shmget,shmat,shmdt,shmctl)
shmget int shmget(key_t key, size_t size, int flag); key: 标识符的规则 size:共享存储段的字节数 flag:读写的权限 返回值:成功返回共 ...
- Django+nginx+uwsgi部署教程(centos7+ubuntu16.4)
在线教育平台项目演示地址 项目部署教程 1.1.工作原理介绍 django 一个基于python的开源web框架 uwsgi 一是一个web服务器,也可以当做中间件 nginx 常用高性能代理服务器 ...
- cpu,核,进程与线程
多进程与多线程 一张图,先来回顾一下并行,并发,串行: 一.多核多线程 当我们要去买一台新电脑时,我们一般都会比较多台电脑的配置,而其中一项关键配置就是几核几线程.一般现在很多电脑都是4核8线程,甚至 ...
- C语言中如何调用另一个源文件里的函数
在开发大型项目时,我们常常需要将一份源码分成多个源文件来进行编写,这样可以方便后期的维护.下面就介绍如何从一个源文件里调用另一个源文件的函数. 在源文件A1.c中调用A2.c 中的函数有两种方法: 1 ...
- Delphi 日期时间函数
DateUtils.IncYear();DateUtils.IncMonth();DateUtils.IncWeek();DateUtils.IncDay();DateUtils.IncHour(); ...
- Vue2学习(3)
子组件索引 尽管有 props 和 events,但是有时仍然需要在 JavaScript 中直接访问子组件.为此可以使用 ref 为子组件指定一个索引 ID.例如: <div id=" ...