无论是读或者写文件,Python 都会跟踪文件中的位置。函数tell() 返回距离文件开始处
的字节偏移量。函数seek() 允许跳转到文件其他字节偏移量的位置。这意味着可以不用从
头读取文件的每一个字节,直接跳到最后位置并只读一个字节也是可行的。
对于这个例子,使用之前写过的256 字节的二进制文件'bfile':
>>> fin = open('bfile', 'rb')
>>> fin.tell()
0
使用seek() 读取文件结束前最后一个字节:
>>> fin.seek(255)
255
一直读到文件结束:
>>> bdata = fin.read()
>>> len(bdata)
1
>>> bdata[0]
255
seek() 同样返回当前的偏移量。
用第二个参数调用函数seek():seek(offset,origin)。
• 如果origin 等于0(默认为0),从开头偏移offset 个字节;
• 如果origin 等于1,从当前位置处偏移offset 个字节;
• 如果origin 等于2,距离最后结尾处偏移offset 个字节。
这些值也在标准os 模块中被定义:
>>> import os
>>> os.SEEK_SET
0
>>> os.SEEK_CUR
1
>>> os.SEEK_END
2
所以,我们可以用不同的方法读取最后一个字节:
>>> fin = open('bfile', 'rb')
文件结尾前的一个字节:
>>> fin.seek(-1, 2)
255
>>> fin.tell()
255
一直读到文件结尾:
>>> bdata = fin.read()
>>> len(bdata)
1
>>> bdata[0]
255
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
上面这个seek函数的例子,做了一些尝试,中间犯了不少错误,记录一下
先创建一个real.txt的文件,并写入123456787
这里要注意一下,当我使用w写入模式打开文件的话,你是没有办法对f这个打开方式进行读取操作的,你只有把打开模式切换成r,才能对这个打开方式进行读取操作
随后,我们可以看到,tell和seek在返回读取位置的时候,是没什么区别的
但是tell只能读取从头开始的,seek可以自己自定义起始位置
然后我们进行一下测试,我们的real文本的字节数应该是10
你利用seek参数,可以超出读取位置,但是,你检测剩余读取长度的时候,还是0
如果你定位到8,那么,他会自动把剩余读取的长度显示成2了
然后当前序列第一位就变成9了
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
用第二个参数调用函数seek():seek(offset,origin)。
• 如果origin 等于0(默认为0),从开头偏移offset 个字节;
• 如果origin 等于1,从当前位置处偏移offset 个字节;
• 如果origin 等于2,距离最后结尾处偏移offset 个字节。
这些值也在标准os 模块中被定义:
>>> import os
>>> os.SEEK_SET
0
>>> os.SEEK_CUR
1
>>> os.SEEK_END
2
所以,我们可以用不同的方法读取最后一个字节:
>>> fin = open('bfile', 'rb')
文件结尾前的一个字节:
>>> fin.seek(-1, 2)
255
>>> fin.tell()
255
一直读到文件结尾:
>>> bdata = fin.read()
>>> len(bdata)
1
>>> bdata[0]
255
然后这里记录一个大坑啊。。。。。。。。。。。。。Python3不允许非2进制的打开方式从末尾定位......日了狗了,所以例子里使用的是rb。。。我想呢,没事用二进制做什么
下面是从文件的当前位置寻找的例子:
>>> fin = open('bfile', 'rb')
接下来的例子返回最后两个字节:
>>> fin.seek(254, 0)
254
>>> fin.tell()
254
在此基础上前进一个字节:
>>> fin.seek(1, 1)
255
>>> fin.tell()
255
最后一直读到文件结尾:
>>> bdata = fin.read()
>>> len(bdata)
1
>>> bdata[0]
255