学习python,到码农博客。

Python中shelve模块

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

 

 
本文转至:https://www.myblou.com/archives/1483
posted @ 2020-12-17 09:18  码农blog  阅读(464)  评论(0编辑  收藏  举报

学习python,到码农博客。

/* 看板娘 */ /* 粒子吸附*/