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}\n')
# 二.周末综合作业:
#
# 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}\n')
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}\n') 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}\n') print("账号注册成功,请输入命令继续操作!") else: print('输入的命令不存在')