接着昨天的文件操作,还有一些结尾的东西。
1.混合文件操作:
先看一下我操作的文件,后面的很多操作都在这个文件下进行的:
这是我乱编的一个文本文件,以下操作就是对这个文件进行的。
# w+:写读 r+:读写,写在文件后面 a+:追加读
f = open("小姐姐联系方式", "r+")
print(f.read())
print(f.tell()) # 237
f.seek(f.tell()) # 不加会默认在文件后直接加
f.write("哦买嘎") #运行程序"小姐姐"文本后面就添加了 哦买嘎
这里只操作了常用的"r+",感兴趣的可以自己练一练另外两个。
2.文件修改:
# 文件修改:不是覆盖,而是往后挤
f = open("小姐姐联系方式", "r+")
# 1. 加载到内存
data = f.read()
new_data = data.replace("岳妮妮", "haha") #运行后,文本里的岳妮妮被haha替换
# 2.清空文件
f.seek(0)
f.truncate() # 截断文件
# 3. 把新内容写回硬盘
f.write(new_data)
f.close()
3.练习:全局检索替换
#全局文本检索替换脚本
import sys
print(sys.argv)
old_str = sys.argv[1]
new_str = sys.argv[2]
filename = sys.argv[3]
# 1. 加载到内存
f = open(filename, "r+")
data = f.read()
# 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}处...")
这是练习文本修改的步骤操作,可以按自己需求模仿去练一练。
4.设计用户登录程序
(要求:若用户密码输入错误3次,则锁定账号)
首先,这是我自己定义的一个用户信息仓库:(姓名,密码,账户状态)
这里账户状态为1,则为锁定状态,为0则为正常状态。
#1.确定 在文件里存储的账号信息结构
#2. 把数据读到内存,为方便调用,改成列表结构list或字典
accounts = {
# 定义一个空字典
}
f = open("account.db", "r")
for line in f:
line = line.strip().split(",") # strip 吃空格
accounts[line[0]] = line
# 3. 搞个循环。要求用户输入信息,判断
while True:
user = input("Username:").strip()
if user not in accounts:
print("该用户未注册...")
continue
elif accounts[user][2] == "1":
print("该账户已锁定,请联系客服解决...")
continue
count = 0
while count < 3: # 控制密码输入次数
passwd = input("Password:").strip()
# 去账号的字典里判断密码是否正确
if passwd == accounts[user][1]:
print(f"Welcome{user}...登录成功...")
exit("bye bye...")
else:
print("密码错误....")
count += 1
if count == 3:
print(f"输错了{count}次密码,锁定账号{user}...")
# 1.先改内存中字典里的账号信息的用户状态
# 2.把字典里的数据信息按源数据格式存回文件
accounts[user][2] = "1" # 1代表账户锁定
f2 = open("account.db", "w")
for user, val in accounts.items():
line = ",".join(val) + "\n"
f2.write(line)
f2.close()
exit("bye bye...")
这是程序运行效果:
这分别是账户锁定登录失败,密码输入错误,账号锁定以及正常成功登录,要求的功能都成功时下。
5.初识函数:
#函数: 减少重复代码; 使程序变得可扩展; 使程序变得易维护
# 函数的定义:
def Add(): # 函数名
print("这是加法")
Add() # 调用函数
def Add(a, b): # 带参数
c = a + b
print(c)
Add()
自定义函数:
def hello(name, age):
print(f"hello,my name is {name},this year {age} years old..")
hello("DaoNan", "22")
函数运行效果: