以t模式为基础进行内存操作
#r(默认的操作模式):只读模式,当文件不存在时会报错,当文件存在时文件指针跳到最开始位置
with open("b.txt",mode="rt",encoding="utf-8") as f:
res=f.read() #一次性把所有内容从硬盘读到内存,从文本指针开始位置读到文本末尾位置
print(res) #print输出模式带了换行
print(res,end="") end:附加在最后一个值之后的字符串,默认为换行
#案例一:之前账号密码信息赋值给变量了,存在内存中。断电就是丢失。改换成账号密码信息存在硬盘中
userinfo.txt
llj:123 #文件句柄不换行
input_user=input("请输入账号:").strip()
input_password=input("请输入密码:").strip()
with open("userinfo.txt",mode="tr",encoding="utf-8") as f:
res_str=f.read()
#print(res,type(res),end="") #print输出模式带了换行
#llj:123 <class 'str'>
user1,pass1=res_str.split(":") #解压赋值
if input_user == user1 and input_password == pass1:
print("输入正确!")
else:
print("输入错误!")
#案例二:针对上面的优化,文本文件中存放多个账号密码信息
userinfo1.txt
llj:123
liang:123
long:123
#文件句柄换到这行行首
input_user=input("请输入账号:").strip()
input_password=input("请输入密码:").strip()
with open("userinfo1.txt",mode="tr",encoding="utf-8") as f:
for line in f: #使用for循环逐行读取文本文件中每一行(for循环逐行读取文本中每一行是以换行为分隔符进行读取)
#print(line,type(line),end="") #文本中llj:123\nliang:123\nlong:123\n
user1,pass1=line.strip().split(":")
if input_user == user1 and input_password == pass1:
print("输入正确!")
break #当输入的账号密码与文本中账号密码每一行一一对比,如果跟循环得到的文本第一行对比失败。继续跟循环得到的文本第二行对比,如果对比失败。
# 继续跟循环得到的第三行对比,如果对比成功,则输出输入正确,break则立刻终止本层循环,就退出程序了
else:#当输入的账号密码与文本中账号密码每一行一一对比,如果跟循环得到的文本第一行对比失败。继续跟循环得到的文本第二行对比,如果对比失败。继续跟循环得到的第三行对比,如果对比失败。
至此for循环循环结束。else包含的代码会在for循环结束后,并且for循环是在没有被break打断的情况下正常结束的,才会被运行
print("输入错误!")