今天看了open函数,看到w+ r+ a+ 这种可读可写的操作。尝试了几次发现,理解很混乱。运行f.close()之后,写入操作才算是完成。那么f关闭之后,再去读它就会出现报错。所以我自己做了一个对比测试:

1、新建文档,里面存入(hello python world),采用 open的 r+模式 下面图片是代码,运行过程,文档结果 一起截图的

先测试,先读后写:

可以发现原来存放在文档里的字符被读出来,新写进去的不能被立即读出到r中再输出到命令行,但是成功写入到文档。 随后第二个f.read()开始对文档进行读操作,但是什么都没有读出来(所以print只输出了换行符,有一行空白),因为上一个read已经将字符取走(我个人这么理解它),还因为这个原因,我们的写入操作是跟在原来的字符后面的,而不是覆盖它。

python open函数 newline python open函数_读写操作

再测试先写后读:先将文档内容更改回(hello python world)

可以看到先写入成功,并且是覆盖掉了原有的部分内容(中文字符占两个英文的位置)。未被覆盖的内容因为没有进行任何变动操作,便被r.read()读出并print到命令行

python open函数 newline python open函数_命令行_02

2、同样的方法测试 w+, 可以看到原有内容被完全覆盖。第一次的read()也未读取到内容,print输出了一行空白。说明w+不能直接读出内容。 那所谓的读写是怎么理解? 日后再说

python open函数 newline python open函数_open函数_03

若将read()函数都删掉则出现如下图情况,不会输出空白,则说明print函数有工作,只是没有内容,默认输出了‘换行符’

python open函数 newline python open函数_open函数_04

总结:

r 只能读 (带r的文件必须先存在)
r+ 可读可写 不会创建不存在的文件 从顶部开始写 会覆盖之前此位置的内容 
w+ 可读可写 如果文件存在 则覆盖整个文件不存在则创建  //要close 之后才算完成写入
w 只能写 覆盖整个文件 不存在则创建 
a 只能写 从文件底部添加内容 不存在则创建 
a+ 可读可写 从文件顶部读取内容 从文件底部添加内容 不存在则创建               r+可读可写,不会创建不存在的文件。如果直接写文件,则从顶部开始写,覆盖之前此位置的内容,如果先读后写,则会在文件最后追加内容。