文件小练习

文章介绍了如何使用Python编写一个脚本,实现对指定文件内容的全局替换,并演示了用户登录认证程序,包括密码错误锁定机制。
摘要由CSDN通过智能技术生成

1.写一个脚本,对指定文件内容进行全局替换,并且替换完成后打印替换了多少处内容

写完后的脚本调用方式:
python your_script.py old_str new_str filename

​​​​​​​import sys  #导入sys包
print(sys.argv)  #打印一下,会显示出当前路径['C:/pycharmProjects/python2023特训营/Day02/file_replace.py']  
old_str = sys.argv[1]  #sys.argv[1]代表第一个参数,赋值给old_str
new_str = sys.argv[2]  #sys.argv[2]代表第二个参数,赋值给new_str
filename = sys.argv[3]  #sys.argv[3]代表第三个参数表示文件名,赋值给filename
# 1.先写入内存
f = open(filename, "r+", encoding="utf-8")  #注意文件编码格式
data = f.read()   #将文件内容读到data中
# 2.计算替换次数,替换
old_str_count = data.count(old_str)   #计算第一个参数出现的次数
new_data = data.replace(old_str, new_str)   #将老参数替换为新参数,并且赋值给新文件
# 3.清空老文件
f.seek(0)     #移动光标到第一位
f.truncate()   #截断光标后的文件,光标在第一位表示全部截断
# 4.写入并保存新文件
f.write(new_data)   #写入新文件
f.close()   #保存并关闭文件
print(f"成功替换字符{old_str}to{new_str},共{old_str_count}处...")  #打印结果

进入terminal,必须要让你现在的位置处于,你的脚本文件的位置,如果不在,则会找不到文件无法运行脚本文件,查看自己脚本文件的位置,然后通过cd命令进入:

PS C:\pycharmProjects\python2023特训营> cd C:\pycharmProjects\python2023特训营\Day02

然后输入脚本命令,python file_replace.py打开我的脚本python文件,17 为我都第一个参数,199为我的第二个参数,name_list是我需要操作的对象文件名:
PS C:\pycharmProjects\python2023特训营\Day02> python file_replace.py 17 199 name_list
['file_replace.py', '17', '199', 'name_list']
成功替换字符17to199,共4处...

最后还需要注意编码问题,因为没加这个encoding="utf-8"导致报错

f = open(filename, "r+", encoding="utf-8")

2.用户登录认证程序

要求用户输入账号密码进行登录

用户账号信息保存在文件内

用户密码输入错误三次后锁定用户,下次再登录,检测到是这个被锁定的用户,则依然不允许其登录,提示已被锁

# 1. 确定在文件里存储的账号信息结构
# iwbf,abc123!,1    iwbf为账号,abc123!为密码,1表示为锁定
# 2. 把账号数据读到内存,为了方便调用,可以改为list,但是字典更好
accounts = {

}   #创建一个空字典
# 打开已经准备好的一个账号数据文本,模式为读,编码格式为utf-8
f = open("account.db", "r", encoding="utf-8")  

for line in f:    #循环文件每一行内容
#先用strip将文件中每行数据去掉空格或者/n,再用split将字符串以,为分隔符,分隔字符串为列表。存在变量line中
    line = line.strip().split(",")   
    accounts[line[0]] = line   #line[0]取出列表第一个元素作为字典的键,并且将列表存入字典中
print(accounts)   #打印字典
# 3. 搞个loop,要求用户输入账号信息,去判断就可以了

while True:   #死循环
    user = input("Username:").strip()   #用户名等于用户输入的值,并且去除空格等误操作影响判断
    if user not in accounts:       #用in判断用户输入的账号是否不存在于字典当中
        print("该用户未注册...")    #如果不存在那么判断为未注册
        continue       #不执行下面的操作,让用户重新输入账号
    elif accounts[user][2] == "1":      #取字典当中下标为2的元素,判断这个元素是否为字符1
        print("此账号已锁定,请联系管理员...")     #如果是,那么代表这个账号为被锁定账号
        continue      #不执行下面的操作,让用户重新输入账号

    count = 0   #结果上面的判断,证明用户已经输入了一个正确的账号,那么开始计数用户输入密码的次数
    while count < 3:     # 控制密码输入次数
        passwd = input("Password:").strip()    #passwd为用户输入的密码
        if passwd == accounts[user][1]:    #拿字典里的密码和用户输入的密码做对比
            print(f"Welcome{user}...登陆成功...")    #对了就输入登陆成功退出程序
            exit("byebye....")
        else:
            print("Wrong passwrd.....")     #输入错误就显示输入错误,将计数器+1再进入循环让用户重新输入

        count += 1

    if count == 3:     #如果程序没结束,那么就意味着用户已经输入三次错误密码
        print(f"输错了{count}密码,需要锁定账号{user}...")
        accounts[user][2] = "1"   #经过上面的循环记录了用户输入三次错误密码的账号,然后将账号的锁定值改为1
        f2 = open("account.db", "w", encoding="utf-8")   #打开文件写入新数据
        for user, val in accounts.items():   #items函数可以返回字典中所有的(key和vlaue)元组的列表,用user接受字典返回的key值,val接收返回的value值
            line = ",".join(val) + "\n"   #将字典以,为分隔变成字符串,只取其中value值并且加上\n
            f2.write(line)   #将line写进字符串中
        f2.close()
        exit("bye------")

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值