Python +模式

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 +模式

赞 (0) 打赏

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏