首页 > 数据库 >python(十一):小型数据库:shelve

python(十一):小型数据库:shelve

时间:2023-04-12 20:36:39浏览次数:50  
标签:文件 python fenshu 数据库 db xuesheng shelve open

 

Python中shelve模块是对象持久化保存方法,将对象保存到文件里面,缺省(即默认)的数据存储文件是二进制的,可以作为一个简单的数据存储方案。使用时,只需要使用open函数获取一个shelf对象,然后对数据进行增删改查操作,在完成工作、并且将内存存储到磁盘中,最后调用close函数变回将数据写入文件。

 

一、导入shelve模块

 

import shelve

 

 

 

二、格式

 

shelve.open(filename, flag=’c’, protocol=None, writeback=False)

创建或打开一个shelve对象。shelve默认打开方式支持同时读写操作。
filename是关联的文件路径。
可选参数flag,默认为“c”,如果数据文件不存在,就创建,允许读写;可以是: “r”: 只读;“w”: 可读写; “n”: 每次调用open()都重新创建一个空的文件,可读写。
protocol是序列化模式,默认值为None。

 

 

 

shelve.close()

同步并关闭shelve对象。
注意:每次使用完毕,都必须确保shelve对象被安全关闭。

 

 

三、内容序列化到文件

 

import shelve
xuesheng = {'name': 'Tom', 'age': 20}
fenshu = [99, 88, 77]
db = shelve.open('shelve_db')   # 创建一个二进制文件来存储信息,不用指定文件格式后缀,默认是二进制,不用指定是读取还是写入,默认是可读可写
db['xuesheng'] = xuesheng       # 将xuesheng字典附上一个键值xuesheng,并序列化到db文件中
db['fenshu'] = fenshu           # 将fenshu列表附上一个键值fenshu,并序列化到db文件中
print(fenshu)
print(len(db))          # 查看文件里有几个对象
db.close()

运行结果:

[99, 88, 77]
2

 

 

 

四、访问文件的内容

 

import shelve
db = shelve.open('shelve_db')
print(db['xuesheng'])       # 查看文件中键是'xuesheng'的内容
db.close()

运行结果:

{'name': 'Tom', 'age': 20}

 

 

 

五、删除文件中的内容

 

import shelve
db = shelve.open('shelve_db')
del db['fenshu']        # 删除db文件中键为fenshu的值
print(len(db))          # 查看文件中有几个对象
db.close()

运行结果:

1

 

 

 

六、将类实例使用shelve来序列化和反序列化

 

import shelve
class Xuesheng:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def func(self):
        pass

def write_shelve():        # 定义一个写入的函数
    s = Xuesheng('Tom',20)        # 类实例化
    db = shelve.open('shelve_xuesheng_db')        # 创建一个叫shelve_xuesheng_db的二进制文件
    db['s'] = s                    # db文件存入s类的实例化,附上这个类实例化的键值为s
    db.close()                    # 关闭db数据库文件,查看路径里面可能存的有几个文件,可能有存目录的,存数据的,包括备份的一些文件等等

def read_shelve():        # 定义一个读取的函数
    db = shelve.open('shelve_xuesheng_db')        # 读取shelve_xuesheng_db的文件
    st = db['s']                # db变量的文件里面键值为s的对象赋给st变量
    print(st)
    print(st.name)
    print(st.age)
    db.close()

if __name__ == '__main__':
    write_shelve()
    read_shelve()

运行结果:

<__main__.Xuesheng object at 0x0000022CDA0635B0>
Tom
20

标签:文件,python,fenshu,数据库,db,xuesheng,shelve,open
From: https://www.cnblogs.com/zhangxianrong/p/17311129.html

相关文章

  • python习题-验证6174猜想
    【题目描述】1955年,卡普耶卡(D.R.Kaprekar)对4位数字进行了研究,发现一个规律:对任意各位数字不相同的4位数,使用各位数字能组成的最大数减去能组成的最小数,对得到的差重复这个操作,最终会得到6174这个数字,并且这个操作最多不会超过7次。请编写程序验证这个猜想。【源代码程序】de......
  • python习题-杨辉三角
    【题目描述】输出n(0<n)行杨辉三角形,n由用户输入。【源代码程序】n=int(input("请输入要打印的杨辉三角的行数:"))#初始化杨辉三角的第一行triangle=[[1]]#循环生成杨辉三角foriinrange(1,n):#初始化当前行的第一个元素为1row=[1]#循环生成当......
  • 20230412-Python-pycharm使用技巧
     1.新建文件,自动生成代码       2.自动补齐自定义段落        3.修改注释颜色        ......
  • Python的函数的缺省值参数(空列表)之坑
    Fromhttps://www.jianshu.com/p/9f899d829562 defadd(x,lst=[]):ifnot(xinlst):lst.append(x)returnlstlist1=add(1)print(list1)list2=add(2)print(list2)list3=add(3,[11,12,13,14])print(list3)list4=add(4)print(list4......
  • Python程序笔记20230304
    抛硬币实验random模块importrandomrandom.randint(a,b)返回一个随机整数N,范围是:a<=N<=brandom.choice("ilovefishc")从"ilovefishc"这个字符串中随机选出一个字符。编写一个双色球的开奖模拟程序importrandomred=random.sample(range(1,34),6)blue=r......
  • Python+selenium点击网页上指定坐标
     fromseleniumimportwebdriverfromselenium.webdriver.common.action_chainsimportActionChainsdefclick_locxy(dr,x,y,left_click=True):'''dr:浏览器x:页面x坐标y:页面y坐标left_click:True为鼠标左键点击,否则为右键点击''&#......
  • (三)python多进程multiprocessing模块的变量传递问题:父进程中的numpy.array对象隐式序列
    参考:https://docs.python.org/zh-cn/3/library/multiprocessing.htmlcloudpickle——Python分布式序列化的专用模块python多进程multiprocessing模块的变量传递问题:父进程中的numpy.array对象隐式序列化到子进程后的inplace操作的问题-Death_Knight-博客园(cnblogs.com)......
  • 图数据库驱动的基础设施运维实操
    本文系图技术在大型、复杂基础设施之中SRE/DevOps的实践参考,并以OpenStack系统之上的图数据库增强的运维案例为例,揭示图数据库、图算法在智能运维上的应用。本文所有示例代码开源。最近,有些尚未使用过图技术、DevOps/Infra领域的工程师在NebulaGraph社区询问是否有「图......
  • 同步合约数据到数据库经典案例2
    在上一篇文章中,我们从eventlog中同步数据。本篇我们尝试直接调用合约来获取数据。在我们的示例合约中,定义了一个struct用来保存数字藏品的上架信息。```javascriptstructsalesInfo{addresssales;addresscollection;uint96token_id;addresstoken;uint......
  • python之封装mysql
     数据查询类封装1.功能分析可以连接不同sql数据库查一条数据,多条数据可以获取不同格式的数据2.封装成数据库查询类封装思路:数据库查询模块有多个功能,且需要复用,所以封装成类在构造方法中创建连接创建对象方法实现各种查询#-*-coding:utf-8-*-#@Time......