r、w、a我们说是只读,只写和追加。
现在我们来看+模式,它可以给r、w、a这三种模式赋予新的功能,就是让它们可读可写。
我们前面说+号不能单独使用,必须配合r、w、a,同时它也受限于r、w、a。
r+
我们先来看r+,如果文件不存在的时候会发生什么。
with open (r'G:\PythonProject\学习\学习文件\date\e.txt', mode='rt+', encoding='utf-8') as f:
pass
最后就用pass代替了,虽然r+是可读可写,但它会议r为准。如果文件不存在我们运行看看。
直接报错了。
现在我把这个文件路径改一下,改成d.txt。这个路径是存在的。
with open(r'G:\PythonProject\学习\学习文件\date\d.txt', mode='rt+', encoding='utf-8') as f:
res = f.read()
print(res)
这样是没问题的。
原来r模式是不可写的,现在我在后面写一个f.write(‘嘿嘿嘿’)。
with open(r'G:\PythonProject\学习\学习文件\date\d.txt', mode='rt+', encoding='utf-8') as f:
res = f.read()
print(res)
f.write('嘿嘿嘿')
然后我们来运行一下,看看什么情况。
嘿嘿嘿就出现在最后。原因就是r模式打开文件,文件指针会停在开始位置。
但是用read读取内容,会从文件指针当前位置一直读到文件末尾,就把整个文件内容都读出来,同时文件指针会更这跳到末尾去。
所以这个时候用write写数据就会写到末尾去。
现在我把中间的f.read注释掉。然后再来运行。
with open(r'G:\PythonProject\学习\学习文件\date\d.txt', mode='rt+', encoding='utf-8') as f:
f.write('嘿嘿嘿')
‘嘿嘿嘿’就跑到开头了。
同时r+还有一个效果就是它会把原来位置的内容覆盖掉。其实硬盘上也是一样的,你往硬盘里写数据,硬盘里原来的数据他不会往后移动,而是会覆盖原来的数据。
这也是为什么有的硬盘数据删除了还可以恢复,有的数据删除了之后就恢复不了了。
如果你只是单纯的删掉文件了,并没有在你原来的位置写入新的数据,数据就是可以恢复的,但是你已经有新的数据覆盖掉了,原来的数据就恢复不了了。
w+
我们接着看w+,它也是可读可写,但是它会以w为准,如果文件不存在,就会创建文件,如果文件存在,就会清空文件。
来验证一下,直接把上面这个r改成w就行了。
with open(r'G:\PythonProject\学习\学习文件\date\d.txt', mode='wt+', encoding='utf-8') as f:
res = f.read()
print(res)
先看f.read,d.txt里面是有数据的,w模式只要一打开文件里的数据就肯定没有了。
什么都没有打印出来,再来看txt文件。
文件里面也是清空了之前的数据。
然后我在前面写点东西吧。
with open(r'G:\PythonProject\学习\学习文件\date\d.txt', mode='wt+', encoding='utf-8') as f:
f.write('abc\n')
f.write('def\n')
res = f.read()
print(res)
这时候你觉得能读到内容吗?
什么也读不到,但是在txt文件里是有内容的。
当我们执行完这个f.write之后,文件指针就已经停在了文件末尾,所以这个时候再f.read是读不到任何内容的。
如果你就想读到文件里的内容,你要用到后面讲的控制文件指针的方法了。
a+
最后a+的话就会以a为准,文件不存在就会创建文件,文件存在文件指针就会跳到末尾,所以用a+模式打开,虽然也是可读可写,但也是读不到数据的。
因为文件指针在末尾,还是要控制文件指针移动才可以。
这里就不具体的演示了。
+号模式我们了解就行了,一般我们都不会用到。
未经允许不得转载:445IT之家 » Python +模式