python3 open 打开模式详解

原创 2018年04月17日 12:36:14
偶尔因为课程需要和兴趣,会敲点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+则报错。

python3的文件读写模式

 任何一种语言,文件的读写都是非常常见的。python的文件读写非常简单,仅仅一个函数open(file也可以,但是我不常用)。 先看看官网的解释: open(file, mode=...
  • jasonfqw
  • jasonfqw
  • 2017-04-18 14:00:10
  • 583

Python3 open()函数

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=No...
  • u010105645
  • u010105645
  • 2017-12-15 00:21:55
  • 3532

解析文本文件 "r" 与 "rb" 模式的区别(Python)

Difference between parsing a text file in r and rb mode0. EOL(End-Of-Line)区别主要在 EOL 的处理方式不同。对于不同的操作系...
  • lanchunhui
  • lanchunhui
  • 2017-02-19 21:35:33
  • 3668

Python3.4操作文件目录

编程语言对文件系统的操作是一项必不可少的功能,各种编程语言基本上都有对文件系统的操作,最简洁的莫过于linux里面shell的操作了,其次,则是python,ruby等动态语言的操作,那么,今天先来看...
  • sxh850297968
  • sxh850297968
  • 2014-11-24 21:45:18
  • 1788

Python 3 读取不同编码的文本文件

1. 读取无BOM的UTF-8编码文件,open方法传入参数:encoding = 'utf-8' 2. 读取有BOM的UTF-8编码文件,open方法传入参数:encoding = 'utf-8...
  • kinglearnjava
  • kinglearnjava
  • 2015-10-13 21:27:54
  • 5069

Python点滴02_Python3打开中文文本时报错的一种处理方法

在Python3中,对UnicodeDecodeError的分析和处理方法
  • PosPro
  • PosPro
  • 2016-01-05 19:09:54
  • 1944

python3 无法读取文本时尝试用二进制方式

import re     res=[]     with open('words','rb') as f:         for line in f:             fo...
  • napo1987
  • napo1987
  • 2014-07-09 18:54:55
  • 618

python open文件 读写模式说明

转自:http://blog.163.com/y845766643@126/blog/static/17104630220101123113029840/ r+: Open for ...
  • rav009
  • rav009
  • 2013-06-06 14:42:01
  • 7993

Python中open参数

打开和关闭文件 现在,您已经可以向标准输入和输出进行读写。现在,来看看怎么读写实际的数据文件。 Python 提供了必要的函数和方法进行默认情况下的文件基本操作。你可以用 file 对象做大部分的...
  • m0_37843198
  • m0_37843198
  • 2017-12-12 16:32:32
  • 81

Python3--文件读取、写入、追加及seek()方法的使用

Python3--文件读取、写入、追加及seek()方法的使用 一、读取、写入、追加 在读取、写入、追加数据之前,我们先导入os模块(我们对文件系统的访问大多通过os模块实现)再将我们要使用的绝对路...
  • m0_37422217
  • m0_37422217
  • 2017-08-10 10:04:41
  • 1036
收藏助手
不良信息举报
您举报文章:python3 open 打开模式详解
举报原因:
原因补充:

(最多只允许输入30个字)