【Python小笔记】读写模式w+、r+、a+实例对比

1、w+模式:在w模式的基础上增加可读功能。

可读可写模式打开文本,文件不存在时新建,文件有内容时以写入的内容覆盖。

a.写入内容
with open('write_plus.txt','w+') as f:
    f.write('hi,I am write plus1')

相应目录下生成’write_plus.txt’
文档内容:
hi,I am write plus1

b.内容覆盖
with open('write_plus.txt','w+') as f:
   f.write('hi,I am write plus2')

文档内容:
hi,I am write plus2
上述两个步骤搜这只用到写的功能,因此与w模式无异。但是w模式不能执行读取操作,不能read。

c.读取内容
with open('write_plus.txt','w+') as f:
    print(f.read())

'w+'模式打开后,内容清空,没有内容可读。

d.先写后读—只能写,不能读
with open('write_plus.txt','w+') as f:#清空文档
    f.write('hi,I am write plus3')
    print(f.read())#没有内容可读
没有输出

文档内容:
hi,I am write plus3
如结果所示,上述语句并没有将写入的内容读取出来,甚至没有将之前已经存在的内容读取出来,没有任何返回。原因是当执行到open语句识别到‘w+’的时候,文档已经被清空了,即使执行到write语句,还没有close的情况下,要写的内容还没有被写入,这时可以读取的内容就是空。
因此在写入后直接读取内容是不可行的。

e.先读后写—之前的内容无可读,只能写入之后的内容
with open('write_plus.txt','w+') as f:
    str_file=f.read()+' I am write plus 4'#这一步已经没有内容可读了
    f.write(str_file)

文档内容:
,and I am write plus 4
设想先读取内容,再把读取的内容写入是什么结果呢?如上所示,当以w+模式打开的时候,f.read()已经是空了,无法保留原文档的内容。
先写后读需要分步以非w模式先读,再写入。

总结: w+模式只是在w模式的基础上增加可读功能,read不报错,但实际用该模式打开时,内容已经清空了。

2、r+模式:在r模式的基础上增加可写功能。

可读可写模式打开文本,文件不存在时报错,文件有内容时以写入的内容覆盖。

a.写入内容
with open('read_plus.txt','r+') as f:
    f.write('hi,I am read plus1')

文档内容:
hi,I am read plus1

b.覆盖内容
with open('read_plus.txt','r+') as f:
    f.write('hi,I am read plus2')

文档内容:
hi,I am read plus2
前两种方式,除了无法新建未存在文档,其他与w模式相同。

c.读取内容
with open('read_plus.txt','r+') as f:
   print(f.read())

hi,I am read plus3

文档可以被读取,如同’r’模式

d.先写后读—不能实现一步到位
with open('read_plus.txt','r+') as f:
   f.write('hi,I am read plus3')
   f.read()

文档内容:
hi,I am read plus3
在写的时候,由于文档并未被读取,文档将从头写入,未close情况下,写入的内容没有保存到文档,因此无可读。
实际上,'r+'模式的确可以读取内容,只是在read步骤之前如果有write就没有读取

e.先读后写—可以实现
with open('read_plus.txt','r+') as f:
    new_str=f.read().upper()
    print(new_str)
    f.write(new_str)
HI,I AM READ PLUS3

文档内容:
hi,I am read plus3HI,I AM READ PLUS3
文档打开后,内容是可以被读出来的,在文档读至结尾的的地方,才将新内容写入,因此可以看到先读后写,可以保留已读取的内容,这样类似“追加”模式。

思考:是否可以将读取的内容从头写入?
如果要从头写入,那么就需要定位到开头位置,可以使用seek()方法,读取到数据后,先定位到开头,清空内容后truncate,再write

#恢复到“先写后读”完成后的步骤
with open('read_plus.txt','r+') as f:
    new_str=f.read().upper()
    f.seek(0)#定位到开头
    f.truncate()
    f.write(new_str)

文档内容:
I AM READ PLUS3
这样,就用读取并加工后的内容覆盖了原来的内容,实现了打开一次文件实现将读取的内容重新写入的功能。

3、a+模式:在a模式的基础上增加可读功能。

可读可写模式打开文本,文件不存在时新建,文件有内容时以写入的内容在文档后面追加。

a.写入内容
with open('append_plus.txt','r+') as f:
    f.write('hi,I am append plus1')

文档内容:
hi,I am append plus1

b.追加内容
with open('read_plus.txt','r+') as f:
    f.write('hi,I am read plus2')

文档内容:
hi,I am append plus1hi,I am append plus2
前两种操作,同‘a’模式

c.读取内容

事实上,‘a+’模式也无法读取内容,只不过在read的时候不报错:

with open('append_plus.txt','a+') as f:
   print(f.read())
d.先写后读—不能实现
with open('append_plus.txt','a+') as f:
   f.write('hi,I am append plus3')
   print(f.read())

文档内容:
hi,I am append plus1hi,I am append plus2hi,I am append plus3
没有读取内容,只不过执行了一个追加的操作。

e.先读后写—不能实现
with open('append_plus.txt','a+') as f:
    new_str=f.read().upper()+',and I am write plus 4'#f.read()是空的
    print(new_str)
    f.write(new_str)
HI,I AM READ PLUS3

文档内容:
hi,I am append plus1hi,I am append plus2hi,I am append plus3,and I am write plus 4
有次可以看出,由于‘a+’模式并不能真的读到内容,因此只能进行追加操作。

总结:'a+'模式只不过在‘a’模式上增加read不报错属性,并不能真的读取内容,从而也不能将读取的内容再写入。

三种模式对比:

模式文件不存在再次写入读取文件将原内容读写
w+新建覆盖打开后无内容不可行
r+报错覆盖打开后即读有内容
打开后先写后读无内容
可行,结合seek
不可行
a+新建追加打开后无内容不可行

参考文档:https://blog.csdn.net/weixin_40844116/article/details/84948081

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Python 中,可以使用 `open()` 函数打开文件进行读写操作。`open()` 函数常用的模式参数包括:`r`、`r+`、`w`、`w+`、`a` 和 `a+`。它们的区别如下: - `r`(只读模式):打开文件并读取内容,如果文件不存在则会抛出异常。 - `r+`(读写模式):打开文件以读取和写入内容,如果文件不存在则会抛出异常。 - `w`(只写模式):打开文件以写入内容,如果文件已存在则覆盖原内容,如果文件不存在则创建新文件。 - `w+`(读写模式):打开文件以读取和写入内容,如果文件已存在则覆盖原内容,如果文件不存在则创建新文件。 - `a`(追加模式):打开文件以追加内容,如果文件不存在则创建新文件。 - `a+`(读写模式):打开文件以读取和追加内容,如果文件不存在则创建新文件。 下面是使用这些模式进行文件读写的示例代码: ```python # 写入文件 with open('test.txt', 'w') as f: f.write('Hello, world!') # 读取文件 with open('test.txt', 'r') as f: content = f.read() print(content) # 在文件末尾追加内容 with open('test.txt', 'a') as f: f.write('\nThis is a new line.') # 读取文件 with open('test.txt', 'r') as f: content = f.read() print(content) ``` 上述代码会在当前工作目录下创建一个名为 `test.txt` 的新文件,写入内容 `Hello, world!`,然后再次打开文件读取内容并输出,接着使用追加模式在文件末尾添加一行新内容,最后再次读取文件并输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值