[Python学习日记-27] 文件操作练习题解析
[Python学习日记-27] 文件操作练习题解析
简介
练习题1——全局替换程序
练习题2——模拟登陆
简介
练习题1——全局替换程序
一、题目
- 写一个脚本,允许用户按以下方式执行时填入参数,即可以对指定文件内容进行全局替换
python your_script.py old_str new_str filename
源文件:
马纤羽 深圳 173 50 137442345234
乔亦菲 广州 172 52 158234235252
罗梦竹 北京 175 49 186234234212
[Lucy] 北京 170 48 186234237654
岳妮妮 深圳 177 54 188353245535
贺婉萱 深圳 174 52 189334344522
叶梓萱 上海 171 49 180424323244
- 替换完毕后打印替换了多少处内容
- 提示:读取程序后的字符串需要使用 sys 库下的 argv,使用方法如下
# 以上面的命令为例:python your_script.py old_str new_str filename
f = open(sys.argv[3],'r') # 等于 f = open('filename','r')
二、答案
import os,sys # sys 会把后面输入的 old_str、new_str、filename 变成一个列表——>[old_str,new_str,filename]
f = open(sys.argv[3],'r',encoding='utf-8')
f_new = open(sys.argv[3]+".new",'w',encoding='utf-8')
# 循环文件
for line in f:
# 进行对比替换
if sys.argv[1] in line:
line = line.replace(sys.argv[1],sys.argv[2])
# 无需修改和已修改的字符写入新文件当中
f_new.write(line)
f.close()
f_new.close()
os.replace(sys.argv[3]+".new",sys.argv[3]) # .new 后缀的文件替换源文件
print(sys.argv[1],"replace to",sys.argv[2])
代码输出如下:
练习题2——模拟登陆
一、题目
- 用户输入帐号密码进行登陆
- 用户信息保存在文件内
源文件:user_login
0:0:user1:admin1234 # 错误次数:是否锁定:用户名:密码
- 用户密码输入错误三次后锁定用户,下次再登录,检测到是被锁定的用户禁止登陆
二、答案
# -*- coding:utf-8 -*-
import os
f_r = open('user_login','r')
f_w = open('user_login.new','w')
user_name = input("请输入用户名:")
user_passwd = input("请输入密码:")
user_info = []
is_replace = 0
for line in f_r.readlines():
user_info = line.split(":")
if user_name == user_info[2].strip() and user_info[1].strip() == '1':
print("用户已被锁定,请联系管理员")
elif user_name == user_info[2].strip() and user_passwd == user_info[3].strip():
print("登陆成功")
break
elif user_name == "" or user_passwd == "" or user_name != user_info[2].strip():
is_replace = 1
print("用户名或密码错误!")
break
elif user_name == user_info[2].strip() and user_passwd != user_info[3].strip() and user_name != "":
user_info[0] = str(int(user_info[0]) + 1)
if user_info[0].strip() == '3':
user_info[1] = '1'
f_w.write(":".join(user_info))
user_name = ""
print("用户名或密码错误!")
break
f_w.write(line)
f_r.close()
f_w.close()
if is_replace == 0:
os.replace('user_login.new', 'user_login')
else:
os.remove('user_login.new')
代码输出如下:
登陆成功
用户名或密码为空(记录不会增加)
用户名或密码错误(用户名错误时记录不会增加)
密码输错三次之后会锁定账号
锁定后再登陆会提示账号已被锁定