pickle 模块

- 把数据写入文件时,常规的文件方法只能把字符串对象写入。其他数据需先转换成字符串再写入文件
- python 提供了一个标准的模块,称为 pickle。使用它可以在一个文件中 存储任何 python 对象,之后又可以把它完整无缺地取出来

  • 常规方法写入数据,只能是字符串类型,其他类型无法写入,例如:int,字典,列表等类型;

  • pickle模块,可以在文件中存储任何类型的数据,也可以完整取出任何类型的数据;

主要方法

pickle.dump(obj, file)

将 Python 数据转换并保存到 pickle 格式的文件内

pickle.load(file)

从 pickle 格式的文件中读取数据并转换为 python 的类型

>>> f = open('/tmp/a.data', mode='wb')  # 打开文件/tmp/a.data,以字节的方式写入
>>> user = {'name': 'tom', 'age': 20}  # 定义字典user
>>> import pickle  # 导入模块pickle,可以写入和取出不同类型的数据
>>> pickle.dump(user,f)  # pickle.dump(), 将字典user, 写入到对象f中【/tmp/a.data】
>>> f.close()  # 关闭打开的文件
>>> f = open('/tmp/a.data', mode='rb')  # 打开文件/tmp/a.data,【以字节的方式读取】
>>> adict = pickle.load(f)  # 取出对象f中【/tmp/a.data】所有数据,赋值给变量adict
>>> adict  # 查看字典adict中内容

案例:修改登录注册程序

import pickle
import os

def write_dict():
    # 如果该文件不存在,才去初始化
    if os.path.exists("/tmp/user.data") == False:
        userdb = {}  # 用户存储用户信息
        fw = open("/tmp/user.data", mode="wb")
        pickle.dump(userdb, fw)
        fw.close()
def register():
    username = input("username:")  # 接收用户从键盘输入的用户名
    # 读取字典数据
    fr = open("/tmp/user.data", mode="rb")
    user = pickle.load(fr)
    fr.close()
    if username in user.keys():
        print("用户名已存在")
    else:  # 用户名可用
        password = input("password: ") # 提示用户输入密码
        # 将用户信息添加到字典
        user[username] = password
        # 将修改后的user字典重新写入到文件当中
        fw = open("/tmp/user.data", mode="wb")
        pickle.dump(user, fw)
        fw.close()

def login():
    username = input("username:")  # 接收用户从键盘输入的用户名
    password = input("password:")  # 用户输入的密码
    # 读取字典数据
    fr = open("/tmp/user.data", mode="rb")
    user = pickle.load(fr)
    fr.close()
    if user.get(username) != password:
        print("登陆失败")
    else:
        print("登陆成功")

def show_menu():
    write_dict()
    while True:
        choice = input("1.register  2.login  3.退出  Please enter choice(1/2/3): ")
        if choice not in ["1", "2", "3"]:
            print("请正确输入(1/2/3)!!!!")
            continue
        elif choice == "3":
            print("Byebye~")
            break
        elif choice == "1":
            register()  # 注册函数
        else:
            login()  # 登陆函数
if __name__ == '__main__':
    show_menu()

  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值