文件IO操作-r、w、a结合t模式详解
注意:r、w、a都是控制文件读、写操作的模式,只能与控制文件读、写的模式(也就是控制文件类型的模式,t和b)一起使用,不能单独使用
一、r模式(默认的操作模式):只读模式
1.当读的文件不存在运行时会报错,当读的文件存在时文件指针跳到最开始位置
with open(r'a.txt') as f: #读的文件存在时,文件的指针跳到最开始位置
f.read() #文件的指针跳到最后面;注意:read()方法会一次性把文件全部读完,当该文件过大时,这时用read()方法就会存在弊端
2.r模式案例(登陆系统输入用户名密码案例)
有一个文件为用户登录信息文件,如:name.txt文件,内容如下:
xialiang:123
zhuguiling:345
r模式案例:
name_iput = input("请输入用户名:").strip() #去掉输入的前后空格
pwd_input = input("请输入密码:").strip()
with open(r'name.txt',mode='rt',encoding='utf-8') as f: #文件用的相对路径,mode指定该文本文件为只读模式,encoding指定文件的编码格式
for i in f: #遍历文件中的内容
username,password = i.strip('\n').split(':') #以冒号进行切分列表,冒号前为username,冒号后为password
#在name.txt文件中,第一行完了后换行到第二轮,这时当读取该文件的时候,会存在换行符,如:取冒号后面的为密码,那么取出的就为123\n,直接用这个作为密码时就出现错误,所以要去掉这个换行符
if nam_input == username and pwd_input == password:
print("登陆成功!")
break
else: # 注意:这里else是和for循环平级的,如果放到if下面的话,当第一次循环时如果没有匹配到文件中的内容,就直接执行else了,只能当文件中的所以值都匹配完成后才能判断输入的内容没有匹配到
print("用户名或密码错误!")
二、w模式:只写模式
1.当写的文件不存在时会创建一个新的文件,当写的文件存在时会清空原来文件中的内容,指针跳到最开始的位置
with open(r'name.txt',mode='wt',encoding='utf-8') as f: #当name.txt文件不存在时会创建该文件,当name.txt存在时会执行mode='wt'
····
2.w模式案例
当有一个nam.txt文件,内容如下:
你好呀!
with open(r'name.txt',mode='wt',encoding='utf-8') as f: #首先会清空文件name.txt中的内容
f.write("你在吗?") # 原来name.txt文件中的内容会清空,然后变为这里输入的内容
2.1 在以w模式打开文件写入内容时,在没有关闭的情况下连续写入,新的内容会追加到后面,如下案例:
with open(r'name.txt',mode='wt',encoding='utf-8') as f: #首先会清空文件name.txt中的内容
f.write("你在吗?\n") # 原来name.txt文件中的内容会清空,然后变为这里输入的内容
f.write("你还好吗?") # 现在w模式打开的文件还没有关闭,在进行写入的时候不会清空上面的内容,会在上面的内容后面继续写入
2.3 w模式运用案例,拷贝一个文件内容到一个新的文件中
input1 = input('源文件地址:')
input2 = input('目标文件地址:')
with open(r'%s' %(input1),mode='rt',encoding='utf-8') as f,\
open(r'%s' %(input2),mode='wt',encoding='utf-8') as f1:
res = f.read()
f1.write(res)
三、a模式:追加模式
1.当写的文件不存时会创建一个新的文件,当写的文件存在时指针会跳到最末尾,在原来文件内容末尾增加内容
with open(r'name.txt',mode='at',encoding='utf-8') as f:
f.write('hahhaha') # 在原来文件的后面加上该内容,其他和w模式一样,w模式只是要清空文件然后在写,a模式不会清空文件,是在原来文件内容的最后面增加内容
2.案例:注册用户,填写用户名和密码,如果用户名存在则提示注册不成功,如果用户名不存在则注册成功
分析:1.首先要读该文件中是否存在所输入的用户
2.然后进行追加到原有文件中
name_input = input("请输入用户名:").strip()
pwd_input = input("请输入密码:").strip()
with open(r'name.txt',mode='rt',encoding='utf-8') as f,\
open('name.txt',mode='at',encoding='utf-8') as f1:
for i in f: # 遍历文件中的内容
username,password = i.strip('\n').split(':')
if name_input == username:
print("用户名已经存在!")
break # 跳出当前循环
else:
f1.write(r'\n%s:%s' %(name_input,pwd_input))
print('注册成功')
break
注意:当文件用的是绝对路径时,需要加上r,如:with open(r'E:\py\a.txt') as f: # 在系统中\表示为转义字符,当加上r时表示不是转义字符
四、x模式(了解即可):只写模式,不可读
1.当文件不存在是,则创建一个文件;当文件存在时,则报错
with open(r'E:\py\a.txt',mode='x',encoding='utf-8') as f:
pass
浙公网安备 33010602011771号