python入门第六章 信息安全策略-文件备份 用户账户管理

本文介绍了一个使用Python实现的用户管理与文件备份系统,包括注册、登录、注销、密码修改以及文件或目录的备份功能。核心内容涉及文件操作、字符串处理和路径判断,适合初学者理解基础的文件IO和数据存储管理。
摘要由CSDN通过智能技术生成
import os
def file_backups(file_name, path):
    # 备份的文件名
    file_back = file_name.split('\\')[-1]
    # 判断用户输入的内容是文件还是文件夹
    if os.path.isdir(file_name) is not True:
        with open(file_name, mode='r') as file_data:
            # 创建新文件 , 以只读的方式打开
            new_path = path + '/' + file_back
            with open(new_path, 'w') as file_back:
                # 逐行复制源文件内容到新文件中
                for line_content in file_data.readlines():
                    file_back.write(line_content)

# 判断是目录还是文件
def judge(back_path, file_path):
    if os.path.isdir(file_path) is True:
        # 遍历当前目录下的文件
        file_li = os.listdir(file_path)
        for i in file_li:
            # 拼接文件名称
            new_file = file_path + '\\' + i
            file_backups(new_file, back_path)
    else:
        # 是文件
        if os.path.exists((file_path)):
            file_backups(file_path, back_path)
        else:
            print("备份的文件不存在!")
            exit()

# 备份目录
def backups_catalog():
    # 指定备份的目录
    back_path = input("请输入备份的目录:\n")
    file_path = input("请输入备份的文件:\n")
    # 指定目录不存在
    if os.path.exists(back_path) is False:
        os.mkdir(back_path)
        judge(back_path, file_path)
        print('备份成功!')
    # 指定目录存在
    else:
        judge(back_path, file_path)
        print('备份成功!')

if __name__ == '__main__':
    backups_catalog()

"""
1.用户信息存储在文件中。
2.注册时判断用户是否已存在。
3.登录时比较用户的登录信息与文件中存储的信息是否一致。
(不使用正则,用文件读写函数和字符串操作相关知识实现)
4.注销
5.修改密码
"""
import os


def welcome():
    print("欢迎使用账户管理程序")
    print("1.用户注册")
    print("2.用户登录")
    print("3.用户注销")
    print("4.修改密码")
    print("5.退出")
    while True:
        option = input("请选择功能\n")
        # 用户注册
        if option == '1':
            register()
        # 用户登录
        elif option == '2':
            login()
        # 注销
        elif option == '3':
            cancel()
        # 修改密码
        elif option == '4':
            modify()
        elif option == '5':
            break


# 将文件中的数据转换为字典
def convert_data():
    info_li = []
    with open('./info.txt', mode='r+', encoding='utf8') as f:
        info_data = f.readlines()
        for i in info_data:
            info_dict = dict()
            # 替换{ 和 } 并去掉空格
            step_one = i.replace('{', '').replace('}', '')
            # 以冒号进行分隔
            step_two = step_one.split(':')
            # 拼接字典
            info_dict["姓名"] = step_two[1].split(',')[0].replace("'", '').strip()
            info_dict["密码"] = step_two[2].replace("'", '').strip()
            # 保存到列表中
            info_li.append(info_dict)
    return info_li


# 注册
def register():
    if os.path.exists('./info.txt') is not True:
        with open('./info.txt', mode='w', encoding='utf8') as f:
            f.write('')
    # 用户名列表
    name_li = []
    info_li = convert_data()
    # 接收注册信息
    person_info = {}
    name = input("请输入注册用户名:\n")
    # 获取用户列名列表
    for i in info_li:
        name_li.append(i['姓名'])
    # 判断用户是否存在
    if name in name_li:
        print('用户已注册')
    else:
        password = input("请输入注册密码:\n")
        person_info['姓名'] = name
        person_info['密码'] = password
        # 写入注册信息
        with open('./info.txt', mode='a+', encoding='utf8') as info_data:
            info_data.write(str(person_info) + '\n')

# 登录
def login():
    if os.path.exists('./info.txt') is not True:
        print('当前无数据,请先注册')
    else:
        # 用户名列表
        name_li = []
        info_li = convert_data()
        name = input("请输入登录用户名:\n")
        password = input("请输入登录密码:\n")
        # 获取用户列名列表
        for i in info_li:
            name_li.append(i['姓名'])
        # 判断用户是否存在
        if name in name_li:
            # 获取修改用户的索引
            modify_index = name_li.index(name)
            # 判断密码是否正确
            if password == info_li[modify_index]['密码']:
                print('登录成功')
            else:
                print('用户名或密码不正确')
        else:
            print('用户名或密码不正确')


# 注销
def cancel():
    if os.path.exists('./info.txt') is not True:
        print('当前无数据,请先注册')
    else:
        cancel_name = input("请输入注销的用户\n")
        cancel_password = input("请输入密码\n")
        # 用户名列表
        name_li = []
        info_li = convert_data()
        for i in info_li:
            name_li.append(i['姓名'])
        if cancel_name in name_li:
            # 获取注销用户的索引
            cancel_index = name_li.index(cancel_name)
            # 判断输入的密码是否正确
            if cancel_password == info_li[cancel_index]['密码']:
                info_li.pop(cancel_index)
                # 写入空数据
                with open('./info.txt', mode='w+', encoding='utf8') as f:
                    f.write('')
                for i in info_li:
                    with open('./info.txt', mode='a+', encoding='utf8') as info_data:
                        info_data.write(str(i) + '\n')
                print('用户注销成功')
            else:
                print('用户名或密码不正确')
        else:
            print('注销的用户不存在')


# 修改密码
def modify():
    if os.path.exists('./info.txt') is not True:
        print('当前无数据,请先注册')
    else:
        # 用户名列表
        name_li = []
        info_li = convert_data()
        modify_name = input("请输入用户名:\n")
        password = input("请输入旧密码:\n")
        # 获取用户列名列表
        for i in info_li:
            name_li.append(i['姓名'])
        # 判断用户是否存在
        if modify_name in name_li:
            # 获取修改密码用户的索引
            modify_index = name_li.index(modify_name)
            # 判断密码是否正确
            if password == info_li[modify_index]['密码']:
                # 修改密码
                new_password = input("请输入新密码\n")
                info_li[modify_index]['密码'] = new_password
                with open('./info.txt', mode='w+', encoding='utf8') as f:
                    f.write('')
                for i in info_li:
                    with open('./info.txt', mode='a+', encoding='utf8') as info_data:
                        info_data.write(str(i) + '\n')
            else:
                print("用户名或密码不正确")

        else:
            print("用户名或密码不正确")


if __name__ == '__main__':
    welcome()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灵舒敲代码

我的公v是cxyy1106,欢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值