程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

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

发布于2020-04-03 12:01     阅读(2237)     评论(0)     点赞(4)     收藏(5)


今天写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了

 

 

 

 

 

 

 

 

 

原文链接:https://blog.csdn.net/wangziyang777/article/details/105247330



所属网站分类: 技术文章 > 博客

作者:以拯救苍生己任

链接:https://www.pythonheidong.com/blog/article/301837/20dc7e6c4f43238cb77a/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

4 0
收藏该文
已收藏

评论内容:(最多支持255个字符)