Python 语言及其应用 Chapter_6_Note 3 Seek函数功能

使用seek()改变位置
无论是读或者写文件,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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值