打开一个文件,读取内容,是很常见的操作。不过有的时候我们还需要反复读取文件中的内容,如果多次打开文件读取再多次关闭,显然不是特别好的操作,我们可以借助python文件对象的seek和tell函数,来实现反复的读取文件内容,最后再关闭文件。
文件对象的tell函数
先说tell函数,这个简单,就是告诉我们当前文件读取指针处于文件的什么位置。tell函数返回的位置,以byte计数:
>>> f = open('1.txt')
>>> f.tell()
0
>>> f.read(1)
'#'
>>> f.tell()
1
>>> f.read(24)
' GTR2SP2L A0A2 table\n# g'
>>> f.tell()
25
打开文件后,tell返回的位置是0;读取一个字符,tell就返回1。因此,python文件对象的tell函数,返回的位置就是已经去读的最后一个byte,下次再read,就是从这个位置往后开始算。
文件对象的seek函数
seek函数是用来重新定位读取文件的指针位置。
>>> f.close()
>>> f = open('1.txt')
>>> f.read(48)
'# GTR2SP2L A0A2 table\n# generating time: 17:00:0'
>>> f.tell()
48
>>> f.seek(0)
0
>>> f.read(48)
'# GTR2SP2L A0A2 table\n# generating time: 17:00:0'
以上代码,中间那个f.seek(0),将读取文件的指针,重新定位到最开始的位置,因此两次f.read(48),得到的内容是一样的。
seek含有一个参数,用来确定参考位置,默认是0,表示从文件头开始的绝对位置,1表示以当前位置为参考,2表示从文件末尾开始。不过这个参数,我自己在测试的时候,始终有问题,因此就不详细介绍了。
-- EOF --