发布于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黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!