Python文件处理之seek(), tell()用法

今天写socket传输大文件时, 发现了两个文件处理的神方法, seek(), 下面来介绍一下seek, 可以结合指针来理解

seek用法:就是定义指针类型。 seek(v1, v2):参数v1表示跨度是多少, 参数v2代表起始位置, 只能有三个参数:0,代表从文件最开始位置开始;1,表示从每次当前位置开始,2,表示从文件最后数据开始。

下面先来一段代码, 通过代码进行讲解

data3.txt中数据: AAABBBCCCDDDEEEFFFSSS

f = open('data3.txt', 'rb')
# 从文件初始位置开始, 偏移量为0, 也就是从文件第一个字符开始
f.seek(0, 0)
data1 = f.read(4)
data2 = f.read(4)
print(data1)
print(data2)

 

为什么data1是AAAB, data2中是BBCC呢?

 

f.tell()就是可以打印出当前指针所在的位置

 

首先 f.seek(0, 0):  定义指针: 指针初始位置只想文件数据最开始的位置, 偏移量是0.   指针开始位置就是文件数据最开始, 也就是第一个A, 然后data1 = f.read(4)读取了4个数据之后, 指针到达了第二个B的位置, 所以data2 = f.read()的时候, 指针已经移动到了第二个B的位置, 再接着读取4个字符就是BBCC

ps:因为我们之前没有读取数据, 从头打开文件读取数据, 所以当前位置也是文件数据最开始, 即第一个A, 所以在这里f.seek(0, 0)和f.seek(0, 1)其实是一样的, 

 

下面来看看他俩不一样的地方:

 

f = open('data3.txt', 'rb')
f.seek(0, 0)
data1 = f.read(4)
data2 = f.read(4)
print(data1)
print(data2)
f.seek(2, 1)
data3 = f.read(4)
print(data3)
f.seek(2, 0)
data4 = f.read(4)
print(data4)

 

在第七行我们接着上面的重新定义一下指针, f.seek(2, 1) 。    这次的指针, 起始位置就是当前指针的位置, 偏移量是2。 由上一个代码和图我们看出, 这段代码的前6行的执行会让指针停在第二个C的位置, 然后我们重新定义的指针起始位置就是当前位置, 偏移量是2, 所以data3 = f.read(4)  就是从当前位置下一个字符开始算起,即第三个C处先向后偏移两个字符, 再取4个字符, 所以就是data3的数据就是DDEE

最后第十行我们又重新定义了指针,f.seek(2, 0), 也就是说我们又重新把指针定义为文件数据的起始位置, 偏移量是2。 虽然这段代码的前9行会让指针停在第二个D的位置, 但是我们重新定义了之后吗指针就只想文件数据最开始的位置了, 然后偏移两个数据再取4个字符就是ABBB了

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值