Python编程——shelve模块的使用详解(附实例)

本文介绍了Python的shelve模块,它是一个简单的key-value存储方案,用于持久化Python对象。内容包括shelve模块的介绍、open()函数的用法、如何保存和读取数据,以及一个应用实例——简单的登录系统。
部署运行你感兴趣的模型镜像

1. shelve模块的介绍

(1)shelve模块:

        shelve是一个简单的数据存储方案,类似key-value数据库,可以很方便的保存python对象,其内部是通过pickle协议来实现数据序列化。shelve只有一个open()函数,这个函数用于打开指定的文件(一个持久的字典),然后返回一个shelf对象。shelf是一种持久的、类似字典的对象。

(2)shelve模块的特点:

      1、shelve模块只有一个open()函数;

      2、shelve模块是一个简单的将内存数据通过文件持久化保存的模块;

      3、shelve模块可以持久化任何pickle可支持的python数据格式。

(3)shelve模块中的open()函数:

格式为:shelve.open(filename,flag)

filename:文件名;

flag:打开数据存储文件的格式;

'r'以只读模式打开一个已经存在的数据存储文件
'w'以读写模式打开一个已经存在的数据存储文件
'c'以读写模式打开一个数据存储文件,如果不存在则创建
'n'总是创建一个新的、空数据存储文件,并以读写模式打开

2. shelve模块的使用

(1)保存数据(数据持久化):

import shelve

name = ['Alce', 'Bob', 'Janice']
infos = {'name': 'Alice', 'age': 22,'hobby':'music'}
days=(31,28,31,30,31)

# 保存数据(数据持久化)
with shelve.open('shelve.txt') as f:
    f['name'] = name   # 持久化列表
    f['infos'] = infos  # 持久化字典
    f['days']=days      #持久化元组

执行代码之后会生成三个文件,分别是:shelve.txt.bak     shelve.txt.dat     shelve.txt.dir。

shelve.txt.bak的内容为:

'name', (0, 42)
'infos', (512, 67)
'days', (1024, 17)

shelve.txt.dat的内容为:

�]q (X   AlceqX   BobqX   Janiceqe.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    �}q (X   nameqX   AliceqX   ageqKX   hobbyqX   musicqu.                                                                                                                                                                                                                                                                                                                                                                                                                                                           �(KKKKKtq .

shelve.txt.dir的内容为:

'name', (0, 42)
'infos', (512, 67)
'days', (1024, 17)

 

(2)读取数据:

可以通过字典的形式获取数据

import shelve

with shelve.open('shelve.txt')as f:
    for k,v in f.items():
        print(k,':',v)

结果如下:
name : ['Alce', 'Bob', 'Janice']
infos : {'name': 'Alice', 'age': 22, 'hobby': 'music'}
days : (31, 28, 31, 30, 31)

 我们也可以使用get的方式来获取数据

import shelve

with shelve.open('shelve.txt')as f:
    name=f.get('name')
    infos=f.get('infos')
    days=f.get('days')

print(name)
print(infos)
print(days)

结果如下:
['Alce', 'Bob', 'Janice']
{'name': 'Alice', 'age': 22, 'hobby': 'music'}
(31, 28, 31, 30, 31)

3. shelve模块的应用实例

如下例题是一个简单的登录系统,可以登录三次,登录成功后,可以添加一个学生的信息和修改密码,更新db文件的信息,然后保存到db文件中,下次读取是就是更新后的内容;

然后通过读取文件的内容,查看db文件中的信息,score和account;

import shelve
import random

#存入数据
with shelve.open('db')as db:
    #scores为一个列表,如果score中有值,则scores=score,如果没有则scores=[]
    scores= db.get("score",[])
    #accounts为一个字典,如果account中有值,则accounts=account,如果没有则accounts={"admin":"12345"}
    accounts=db.get('account',{"admin":"12345"})
    for i in range(3):
        id = input("用户名:")
        password = input("密码:")
        if id in accounts and accounts[id]==password:
            print('成绩表为:',scores)
            name = input("name:")         #向列表中添加学生姓名
            cj = random.randint(50, 100)  #向列表中添加学生成绩
            scores.append([name,cj])
            print('成绩表为:',scores)
            npass=input("新密码:")
            db['score']=scores
            db['account']={"admin":npass}
            break
        else:
            print("用户名或密码错误")
    else:
        print("三次机会已用完,再见!")

#读取保存的数据信息
print('-'*20)
with shelve.open('db')as db:
    for k,v in db.items():
        print(k,':',v)

结果如下:

用户名:admin
密码:123
用户名或密码错误
用户名:admin
密码:12345
成绩表为: []
name:1
成绩表为: [['1', 83]]
新密码:11111
--------------------
score : [['1', 83]]
account : {'admin': '11111'}

 

您可能感兴趣的与本文相关的镜像

Anything-LLM

Anything-LLM

AI应用

AnythingLLM是一个全栈应用程序,可以使用商用或开源的LLM/嵌入器/语义向量数据库模型,帮助用户在本地或云端搭建个性化的聊天机器人系统,且无需复杂设置

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值