python文件操作中的坑

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)

运行截图:
在这里插入图片描述

Guess you like

Origin blog.csdn.net/lemeifei/article/details/121052057