python大作战之文件读写(r+,w+,a+)特别篇

对于python3.5,个人觉得在文件读写操作这块需要侧重阐述下r+,w+,a+这三个操作,另外涉及到的rb和wb跟转码有关,可以放到后面和大家讲

我直接用代码来给大家演示并解释下:

1:r+(读写模式)

>>> f=open('fjh.txt','r+',encoding='utf-8')------首先我们打开一个空的文件
>>> f.write('hello world\n')------往里面写入一些内容
12
>>> f.flush()------使用flush时时刷新缓存
>>> f.readline()------接着读取文件内容
''
>>> f.tell()
18

这里大家或许会有些差异,为什么读出来的是一个空字符,因为使用r+模式,如果是对一个空文件进行写入后,那么这时文件指针就停留在

写入内容的末尾,自然读出来的就是一个空字符,我们可以使用f.tell()去检查当前文件指针的位置,从结果18可知,确实实在文件末尾。

如果文件内容原本就有,而不是一个空文件去进行写入后,那么使用r+模式,进行读操作,文件指针就在文件的首位。

>>> f=open('fjh.txt','r+',encoding='utf-8')
>>> f.tell()
0
>>> f.readline()
'i am you boss\n'

使用tell就看出有内容的文件,进行读操作,指针就在首位置。

如果文件本身就有内容,那使用write()去操作,将会覆盖原先内容。


2:w+(写读模式)

如果这个文件存在,则覆盖,如果不存在,就创建


3:a+(追加读写模式)

>>> f=open('fjh1.txt','a+',encoding='utf-8')
>>> f.write('hello')
5
>>> f.tell()
5
>>> f.readline()

如果文件不存在,那么就创建文件,a+的指针永远在文件末尾,除非把它的指针移动到首位,不然读取的全是空字符

如果文件存在,正如刚才所说,a+的指针永远在文件末尾,那么在文件内容存在的前提下进行a+操作,那么直接就在文件

内容末尾追加,见下面实例:

>>> f=open('fjh1.txt','a+',encoding='utf-8')
>>> f.write('world')
5
>>> f.flush()
>>> f.tell()
10


综上:

1:r+和a+用的比较多,使用w+需要预先备份

2:r+的特点是指针在首位,不能追加文件内容,只能覆盖,但是可以移动指针来完成追加,a+的特点是指针在末尾,可以创建新文件,可以追加

3:对于a和a+,主要是read(读取操作的区别)

举例:下面是涉及a的操作

>>> with open('abc.txt','a') as demo1:
	demo1.write('\n这是a的操作\n')
	demo1.write('这是dafdsfa\n')
	print(demo1.read())

	
8
10
Traceback (most recent call last):
  File "", line 4, in 
    print(demo1.read())
io.UnsupportedOperation: not readable
从代码的报错了可以看出,a不支持read操作

举例:下面是涉及a+的操作

>>> with open('abc.txt','a+') as demo1:
	demo1.write('\n这是a+的操作\n')
	demo1.write('这是dafdsfa\n')
	demo1.flush()
	demo1.seek(0)
	print(demo1.read())

	
9
10
0
世界你好你好世界你好世界
sfadfa
dgrgad
grrgdf
eadg
ads
f
这是a的操作
这是dafdsfa
从代码中可以看出,a+支持read操作


你可能感兴趣的:(python基础)