python3 open 打开模式详解

偶尔因为课程需要和兴趣,会敲点python代码,经常会接触文件读写,但是一直没有弄明白r+, w+, a+的区别,今天写点脚本又碰到了这个问题,打算实验一下这几个发开模式。

1. 官方文档是说:
r 以读的方式打开
w 以写方式打开
a 以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+ 以读写模式打开
w+ 以读写模式打开 (参见 w )

a+ 以读写模式打开 (参见 a )

r, w, a这三个就不实验了,只需要注意如果打开文档不存在,r会报错,w和a则会创建新文档。

2. r+:

txt文本如下(同第3、4小节的原始文本):


在解释器里执行下列语句:首先把工作路径切换到txt文本所在目录,然后打开txt文本

>>> os.chdir('/your/path/')
>>> txt = open('t.txt', 'r+')
>>> txt.write('hhh')
3
>>> txt.close()

执行结果是:

可以看到写入的'hhh'把原来文本中的'A\nB'这三个字符给覆盖了,写入位置是文本起始处

但是如果进行了读操作,写入就会在文本后面追加,而不是从头覆盖原始内容了,见下图:

>>> txt = open('t.txt', 'r+')
>>> txt.readline()
'A\n'
>>> txt.write('hhh')
3
>>> txt.close()

执行结果为:


3. w+

w+是打开文件后清空原始内容,对清空后的文本可执行读写操作,读操作需要通过seek()方法将读取指针从末尾移动到前面,才能读取内容(w模式是不能读取的),写操作则是一直追加在文本末尾。

>>> txt = open('t.txt', 'w+')
>>> txt.readline()
''
>>> txt.write('E\nF\nG\nH')
7
>>> txt.readline()
''
>>> txt.seek(0, 0)
0
>>> txt.readline()
'E\n'
>>> txt.readline()
'F\n'
>>> txt.close()

执行结果是:


4. a+

a+是追加文本在文档末尾,不会覆盖原来的内容,读取时也需要通过seek()方法移动读取指针到文档开头,否则指针在最后面是读取不到内容的。

>>> txt = open('t.txt', 'a+')
>>> txt.readline()
''
>>> txt.seek(0, 0)
0
>>> txt.readline()
'A\n'
>>> txt.write('\nE')
2
>>> txt.close()

执行结果:


5. 小结

看到这里呢,a+和r+的区别也就知道了。r+如果不进行读操作,会从文档起始位置开始写入,并会覆盖原始文本;a+永远是追加在文本在文档最后面。w+则会清空原始文本,清空后就跟a+的行为相同了。a+和w+在打开文件不存在的情况下能创建新文档,而r+则报错。

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,open()函数用于打开文件并返回一个文件对象,可以用来读取或写入文件。open()函数的基本语法为: ```python open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) ``` 其中,file参数表示要打开的文件名,可以是一个字符串类型的文件路径或文件描述符;mode参数表示打开文件的模式,有读取('r')、写入('w')、追加('a')等模式;buffering参数表示缓冲区大小,-1表示使用默认缓冲区大小;encoding参数表示文件编码方式,如果不指定则使用系统默认编码方式;errors参数表示编码错误处理方式;newline参数表示换行符设置,如果不指定则使用系统默认换行符;closefd参数表示是否关闭文件描述符,如果为True,则在文件关闭时同时关闭文件描述符;opener参数表示自定义打开方式。 常见的打开文件模式有: - 'r':只读模式,文件必须存在,否则抛出异常。 - 'w':只写模式,文件不存在时会被创建,若文件已存在则覆盖原内容。 - 'a':追加模式,文件不存在时会被创建,若文件已存在则在文件末尾添加新内容。 例如,打开一个名为“test.txt”的文件并读取其中的内容,可以使用以下代码: ```python with open('test.txt', 'r') as f: content = f.read() print(content) ``` 其中,使用了with语句来自动关闭文件,将文件内容读取到content变量中并输出。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值