r模式下只能读 ,文件不存在就报错,不存在覆盖问题
with open('login-info.txt',encoding='utf-8',mode='r') as f: t=f.read() print(t)
正常输出:
文件不存在就报错
r+模式下可读可写,文件不存在就报错,写文件的时候它是会覆盖前面的内容
with open('login-info.txt',encoding='utf-8',mode='r+') as f: t=f.read() print(t)
正常输出:
文件不存在就报错
w模式下,只能写,如果文件不存在就创建, 写文件的时候它是会覆盖前面的内容
with open('l.txt',encoding='utf-8',mode='w') as f: f.write('666')
可以看到正常写:
注意的是.只能写入字符串,写入数字会直接报错,就算你使用bytes模式.也得将666转成bytes类型
a模式下,只能写,如果文件不存在就创建,不会覆盖,会在文件末尾追加
with open('l.txt',encoding='utf-8',mode='a') as f: f.write('555') f.write('444') f.write('111')
可以看到:
当然你也可以加’\n’来进行换行
a+模式下,只能写,如果文件不存在就创建,不会覆盖,会在文件末尾追加
这里有个坑:
在Python中读取文本使用a+模式打开文本文件,直接读取文件返回的数据为空,
原因是因为read方法取到的是光标之后的数据,而a+是追加文本,光标默认在最后,所以取到的数为空
解决方法:
需要使用f.seek(0),将光标移动到下标为0的位置后,再使用f.read()方法就可以取到全部数据。
还是刚才这个文件
with open('l.txt',encoding='utf-8',mode='a+') as f: t=f.read() print(t)
你会发现,你什么都读不出来.你会疑惑,因为文件里明明有东西.这就是光标的问题了!
因为a+模式下,光标在末尾,他是末尾追加模式,而读文件是从光标的位置开始,往后面读,但是后面没有内容了.所以就是空
解决方法也很简单,将光标移动到你想读的地方就好了
比如:
with open('l.txt',encoding='utf-8',mode='a+') as f: f.seek(0) t=f.read() print(t)
运行截图: