Python文件读/写指针,python,读写


当我们学会了用python打开文本文件并进行简单的读取和写入操作时,不知道我们有没有注意到python使用read()和write()函数读写文件的机制,这种机制与我们在打开文件时设置的模式有关。

常用的打开文件的模式为:

‘r’:只读,在文件的开始处读取文件的内容

‘w’:只写,设置为w模式时,文件的内容将被清空,此时从文件的开始处写入新的内容

‘a’:只写,文件的内容保留,但从文件的最末尾处开始写入新的内容

‘r+’:可读写,读操作与‘r’一致,写操作时,从文件的当前指针开始写

‘w+’:可读写,文件的内容将被清空,此时从文件的开始处写入新的内容

‘a+’:可读写,文件的内容保留,但从文件的最末尾处开始写入新的内容

我们通过这些模式可以看出来,在你首次进行读写时,不同的模式其文件指针(开始读写处的位置)是不一样的。那么如何灵活的控制我们文件的指针使我们可以随心所欲的在指定位置处开始读写操作呢?答案是使用seek()函数和tell()函数。

举个简单的例子,有个文件test.txt,内容是hello,world

使用‘r+’模式打开文件:

#打开文件test.txt
file = open(r'C:\Users\esricc\Desktop\test.txt','r+')  
#查询当前的文件指针位置
pos = file.tell()

此时,pos = 0 ,也就是说文件指针位于从文件的开始处,那么接下来的读写操作都会从文件的开始处进行。

#读取文件内容存入变量filecontent中
filecontent = file.read()
#执行读操作后,再次观察文件指针的位置
pos = file.tell()

此时,pos =11,因为文件内容‘hello,world’刚好占了11个字节,那么此时文件指针就在d后,如果要进行写操作就行在hello,world后进行了。

file.write('!!!')
file.close()

此时,我们打开文件,可以看到文件内容被修改为了hello,world!!!

以上是文件指针的工作机制,有兴趣的同学可以试下w+和a+模式下文件的指针是如何工作的。


前面我们使用tell()函数观察了文件指针的位置,为了能够灵活的对文件进行读写操作,接下来我们使用seek()函数来指定文件指针的位置。

seek(offset,whence) 方法有两个参数,whence为可选参数,给 offset 定义一个参考,表示要从哪个位置开始偏移;0 代表从文件开头开始算起,1 代表从当前位置开始算起,2 代表从文件末尾算起;offset 指开始的偏移量,也就是代表需要移动偏移的字节数,如果是负数表示从倒数第几位开始。

还是以test.txt为例:

#打开文件
file = open(r'C:\Users\esricc\Desktop\test.txt','r+')
#读取文件内容
filecontent = file.read()
#设置文件指针在文件的开始处以在文件开始处写入新的内容
file.seek(0)
file.write('coder,'+filecontent)
file.close()

在读取文件的内容后,文件指针就在hello,world!!!的末尾处,此时,我想在文件内容的开头处加入一个字符串'coder,' ,那么就需要将文件指针设置到文件的开始处,file.seek(0)实现了此功能。file.write('coder,'+filecontent)写入新的内容为coder,hello,world!!!。 此处需要注意的是,如果不是'coder,'+filecontent的话,那么文件的内容将会变为coder,world!!!