少说话多写代码之Python学习063——标准模块(shelve模块)

栏目: Python · 发布时间: 6年前

内容简介:如果我们只需要存少量的数据,一个简单的存储方案是使用shelve模版。我们只需要给他提供一个指定路径的文件名。shelve调用过程是,先调用open函数,参数为文件名。返回值是一个shell对象。这个对象可以用来存储数据,可以作为一个字典来操作,但是键一定是字符串类型的。操作完成后调用close函数。看下shelve的简单使用,第一段代码中,d不见了,因为当用shell对象查找元素时,这个对象根据已经存储的版本进行构建,当给某个键时,被存储了。

如果我们只需要存少量的数据,一个简单的存储方案是使用shelve模版。我们只需要给他提供一个指定路径的文件名。shelve调用过程是,

先调用open函数,参数为文件名。返回值是一个 shell 对象。这个对象可以用来存储数据,可以作为一个字典来操作,但是键一定是字符串类型的。操作完成后调用close函数。看下shelve的简单使用,

import  shelve
#参数为文件名,会在当前运行目录下创建三个文件
#test.dat.bak
#test.dat.dat
#test.dat.dir
s=shelve.open('test.dat')
s['x'] = ['a','b','c']
s['x'].append('d')
print(s['x'])
输出
['a', 'b', 'c']

temp=s['x']
temp.append('d')
s['x']=temp
print(s['x'])
输出
['a', 'b', 'c', 'd']

第一段代码中,d不见了,因为当用shell对象查找元素时,这个对象根据已经存储的版本进行构建,当给某个键时,被存储了。

上述过程如下,

['a','b','c']赋值给x键;

d添加时,当前版本并未保存;

获取值时,获取的是原始版本,因此d不见了。

而第二段,temp是副本,副本修改后,重新保存了,所以能获取到d。我们再通过这个例子,看看shelve实现简单的数据存储。

如下,使用shelve模版模拟简单数据库的使用。

import sys,shelve
def store_person(db):
    """
    Query user for data store it in the shelf object
    """
    pid=input("输入唯一编码:")
    person={}
    person['name'] =input('请输入姓名:')
    person['age']=input('请输入年龄:')
    person['phone']=input('请输入电话号码:')
    db[pid]= person

def lookup_person(db):
        """
          Query user for id and desired field,and fetch the corresponding data form the shelf object
          """
        pid = input('输入唯一编码:')
        field=input('以下信息请输入:(name,age,phone)')
        field=field.strip().lower()
        print(field.capitalize()+':',\
              db[pid][field])

def print_help():
        print('有效的命令有:')
        print('store: 保存一个person对象')
        print('lookup: 通过id查询一个person对象')
        print('quit: 保存退出')
        print('?:显示帮助信息')

def endter_command():
        cmd=input('输入命令:(按?请求帮助)')
        cmd=cmd.strip().lower()
        return  cmd

def main():
        #此处路径根据实际的文件路径更改,不用提前创建该文件,会自动创建
        #D:\\work\\Python\\是我本地电脑存在的目录,大家测试可以自行修改目录
        database= shelve.open('D:\\work\\Python\\database.dat')
        try:
            while True:
                cmd=endter_command()
                if cmd=='store':
                    store_person(database)
                elif cmd=='lookup':
                    lookup_person(database)
                elif cmd=='?':
                    print_help()
                elif cmd =='quit':
                    return
        finally:
            database.close()
#调用
main()

操作输出如下

输入命令:(按?请求帮助)?
有效的命令有:
store: 保存一个person对象
lookup: 通过id查询一个person对象
quit: 保存退出
?:显示帮助信息
输入命令:(按?请求帮助)store
输入唯一编码:1
请输入姓名:yangyoushan
请输入年龄:31
请输入电话号码:13011111
输入命令:(按?请求帮助)lookup
输入唯一编码:1
以下信息请输入:(name,age,phone)name
Name: yangyoushan
输入命令:(按?请求帮助)quit

功能文件下载: https://download.csdn.net/download/yysyangyangyangshan/10860069


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java技术手册(第6版)

Java技术手册(第6版)

Benjamin J Evans、David Flanagan / 安道 / 人民邮电出版社 / 2015-12-1 / 79.00

《Java技术手册 第6版》为《Java 技术手册》的升级版,涵盖全新的Java 7 和Java 8。第1部分介绍Java 编程语言和Java 平台,主要内容有Java 环境、Java 基本句法、Java 面向对象编程、Java 类型系统、Java的面向对象设计、Java 实现内存管理和并发编程的方式。第2部分通过大量示例来阐述如何在Java 环境中完成实际的编程任务,主要内容有编程和文档约定,使......一起来看看 《Java技术手册(第6版)》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具