python基础学习-day11==课后作业练习(文件操作)

python基础学习-day11==课后作业练习(文件操作)

# 一、今日作业
# 1、编写文件copy工具
#方法一:不带文件名
src_file = input('原文件路径:').strip()
dst_file = input('新文件路径:').strip()
with open(r'{}'.format(src_file),mode='rt',encoding='utf-8') as f1,
    open(r'{}'.format(dst_file),mode='wt',encoding='utf-8') as f2:
    res = f1.read()
    f2.write(res)

#方法二:带复件文件名
# 执行思路:
# 原文件的名字
file_name="1.txt"
# 1、根据原文件名生成拷贝后的文件名->1[复件].txt
#split:根据点进行分割
#rpartition:根据点进行分割成三部分(一般用这个进行文件名的分割)
new_file_name,point,end_str=file_name.rpartition(".")#以点进行分割成三部分,把数据分别存放
print(new_file_name)#点之前的部分
print(point)#
print(end_str)#点之后的部分
#将生成好的进行重新的拼接
dst_file_name=new_file_name+"[复件]"+point+end_str#生成的新的目标文件名
print(dst_file_name)#新的目标文件名 1[复件].txt

# 2、打开目标文件(拷贝后的文件),以wb模式打开
#提示:使用wb模式的原因,以后不仅可以拷贝文本文件,还可以拷贝视频等二进制文件
dst_file=open(dst_file_name,"wb")
file=open(file_name,"rb")#将原文件打开

# 3、读取原文件中的数据
file_data=file.read()
# 4、将原文件的数据写入到目标文件里面
dst_file.write(file_data)
# 5、关闭这两个文件
dst_file.close()
file.close()


# 2、编写登录程序,账号密码来自于文件
user_name = input("请输入用户名:")
psd = input("请输入密码:")
with open("user.txt",mode="r",encoding="utf-8") as f :
    for line in f:
        username,password = line.strip().split(":")
        if username == user_name and password == psd:
            print("登录成功")
            break
    else:
        print("账号或秘密错误")

# 3、编写注册程序,账号密码来存入文件
name = input("请输入用户名:")
psd = input("请输入密码:")
with open("user.txt",mode='a',encoding='utf-8') as f:   #追加写入
    f.write(f'{name}:{psd}
')
# 二.周末综合作业:
#
# 1.编写用户登录接口
# ① 输入账号密码完成验证,验证通过后输出"登录成功"
# ② 可以登录不同的用户
# ③ 同一账号输错三次锁定,(提示:锁定的用户存入文件中,这样才能保证程序关闭后,该用户仍然被锁定)
count = 0
while count < 3:
user = input("请输入用户名:").strip()
psd = input("请输入密码:")
#在黑名单文件中取出用户名
with open("black_name.txt", mode="r", encoding="utf-8") as f:
for line1 in f:
blackname = line1.strip()

#在用户信息中取出用户名和密码
with open("name.txt", mode="r", encoding="utf-8") as f:
for line in f:
username, password = line.strip().split(":")
# 将用户输入的用户名和用户信息表中的用户名
if user == username and blackname == username:
print("该账号已被锁定!!")
count=3
break
#将用户输入的用户名和密码跟用户信息表中的用户名和密码做匹配
if user == username and password == psd:
print("登录成功")
count = 3
break
else:
count += 1
print('您已输错%s次,还剩%s次' % (count, 3 - count))
if count==3:
with open("black_name.txt", mode='wt', encoding='utf-8') as f:
f.write(f'{user} ')
print('该账号已被锁定加入黑名单!')

 # 2.2:编写程序实现用户注册后,可以登录,

# 提示:
while True:
    msg = """
        0 退出
        1 登录
        2 注册
        """
    print(msg)
    cmd = input('请输入命令编号>>: ').strip()
    if not cmd.isdigit():
        print('必须输入命令编号的数字,傻叉')
        continue

    if cmd == '0':
        print("已退出程序!")
        break
    elif cmd == '1':
        # 登录功能代码(附加:可以把之前的循环嵌套,三次输错退出引入过来)
        count = 0
        while count < 3:
            user = input("请输入用户名:")
            psd = input("请输入密码:")
            with open("name.txt", mode="r", encoding="utf-8") as f:
                for line in f:
                    username, password = line.strip().split(":")
                    if user == username and password == psd:
                        print("登录成功")
                        count=3
                        break
                else:
                    count += 1
                    print('您已输错%s次,还剩%s次' % (count, 3 - count))
                    if count==3:
                        print('输错3次,退出程序')


    elif cmd == '2':
      # 注册功能代码
        name = input("请输入用户名:")
        pwd = input("请输入密码:")
        with open("name.txt", mode='a', encoding='utf-8') as f:  # 追加写入
            f.write(f'{name}:{pwd}
')
        print("账号注册成功,请输入命令继续操作!")
    else:
        print('输入的命令不存在')
# 思考:上述这个if分支的功能否使用其他更为优美地方式实现

扩展:
3、同一账号输错三次锁定(附加功能,在程序一直运行的情况下,一旦锁定,则锁定5分钟后自动解锁)
# 扩展需求:在3的基础上,完成用户一旦锁定,无论程序是否关闭,都锁定5分钟
while True:
    msg = """
        0 退出
        1 登录
        2 注册
        """
    print(msg)
    cmd = input('请输入命令编号>>: ').strip()
    if not cmd.isdigit():
        print('必须输入命令编号的数字,傻叉')
        continue

    if cmd == '0':
        print("已退出程序!")
        break
    elif cmd == '1':
        count = 0
        while count < 3:
            user = input("请输入用户名:")
            psd = input("请输入密码:")
            with open("name.txt", mode="r", encoding="utf-8") as f:
                for line in f:
                    username, password = line.strip().split(":")
                    if user == username and password == psd:
                        print("登录成功!")
                        count=3
                        break
                else:
                    count += 1
                    print('您已输错%s次,还剩%s次' % (count, 3 - count))
                    if count==3:
                        print("您的账号被锁定5s!!,5s后再继续操作")
                        time.sleep(5)
                        print('改账号已解锁,请重新操作!')

    elif cmd == '2':
      # 注册功能代码
        name = input("请输入用户名:")
        psd = input("请输入密码:")
        with open("name.txt", mode='a', encoding='utf-8') as f:  # 追加写入
            f.write(f'{name}:{psd}
')
            print("账号注册成功,请输入命令继续操作!")
    else:
        print('输入的命令不存在')