当前位置: 首页 > article >正文

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

代码输出如下:

登陆成功

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

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

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

 

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

 


http://www.kler.cn/news/315857.html

相关文章:

  • Java的IO流(二)
  • 基于STM32残疾人辅助行走系统
  • Kotlin 基本介绍(二)
  • macos pyenv 安装python tk 、tkinter图形库方法步骤和使用总结
  • jQuery Mobile 方向改变事件
  • 01 基础request
  • Python进阶学习笔记(一)对象
  • vue的基本原理
  • linux下共享内存的3种使用方式
  • 串的存储实现方法(与链表相关)
  • centos7 源码编译安装faiss
  • 3、论文阅读:EnYOLO:一种基于图像增强的水下目标区域自适应实时检测框架
  • 【Unity设计模式】Unity MVC/MVP架构介绍,及MVC/MVP框架的简单应用
  • Linux —— 网络基础(一)
  • 设计模式中工厂模式的C语言实现
  • python是什么语言写的
  • 一个基于Java SSM框架(Spring、SpringMVC、MyBatis)的沙县小吃点餐系统
  • 基于微信小程序的智慧物业管理系统
  • Codeforces Round 974 (Div. 3)
  • VSCode引用Eigen库无法识别问题解决
  • LEAN 赋型唯一性(Unique Typing)之 Church-Rosser 定理 (Church-Rosser Theorem)及 赋型唯一性的证明
  • 交换机中的信号线需要差分布置吗?
  • 深度学习自编码器 - 随机编码器和解码器篇
  • Kotlin while 和 for 循环(九)
  • CQRS模型解析
  • 计算机信息系统安全保护等级
  • What is new in .NET 8 and C#12
  • oracle 事务的管理
  • 3.《DevOps》系列K8S部署CICD流水线之部署MetalLB负载均衡器和Helm部署Ingress-Nginx
  • [MySQL]数据库修复(Example:1146 Error )