Bootstrap

[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')

代码输出如下:

登陆成功

用户名或密码为空(记录不会增加)

用户名或密码错误(用户名错误时记录不会增加)

密码输错三次之后会锁定账号

 

锁定后再登陆会提示账号已被锁定

 

;