seek()和tell() | Python从入门到精通:高阶篇之五十一

简介: tell() 方法用来查看当前读取的位置; seek() 可以修改当前读取的位置,它需要两个参数,第一个是要切换到的位置,第二个是计算位置方式。

查看上一节:二进制文件

二进制文件的读取位置

首先来创建一个文件,看一下读取文件的位置,依然使用demo.txt来展示。

#使用二进制文件的读取方式
with open('demo.txt','rb') as file_obj:
        print(file_obj.read())

执行结果为:
image.png
文档前面的b代表它是一个二进制的字符串,但是因为类型是ASCII,所以文档内容是以正常字符串的形式显示出来的。怎么验证呢,可以加一个位置索引,读取指定位置的字符,此时显示的就是一个数字了,如下:

with open('demo.txt','rb') as file_obj:
      print(file_obj.read()[0])

执行结果为:
image.png
如果文档里面有中文字符的话,可以看的更加明显,自己可以尝试一下。
之前的课程中讲过,可以加入步长,读取的就是指定长度的内容,比如,这里读取前100个字符:

with open('demo.txt','rb') as file_obj:
      print(file_obj.read(100))

执行结果为:
image.png
那么如果我们想知道读取到什么位置了呢,此时就可以通过tell()方法来实现,这也是本节课讲授的新知识。

tell()方法

tell() 方法用来查看当前读取的位置。

with open('demo.txt','rb') as file_obj:
      print(file_obj.read(100))
      print(file_obj.read(30))

     print('当前读取到了 -->',file_obj.tell())

执行结果为:
image.png

seek()方法

seek() 可以修改当前读取的位置。

with open('demo.txt','rb') as file_obj:
     file_obj.seek(55)
     print('当前读取到了 -->',file_obj.tell())

执行结果为:
image.png
seek的用法:
seek()需要两个参数,第一个 是要切换到的位置,第二个 计算位置方式,它的可选值为:
1、0 从头计算,默认值
2、1 从当前位置计算
3、2 从最后位置开始计算
即先看第二个数字,假设是(x,0)则表示从文档的开始位置切换到第x个位置,如果是(x,1)则表示切换到从当前读取到的位置再向后x的位置开始,同理,如果是(x,2)则表示,切换到文档的末尾再向后x的位置开始,注意,x可以是负数。

with open('demo.txt','rb') as file_obj:
     file_obj.seek(55)
      #     file_obj.seek(80,0)
      #     file_obj.seek(70,1)
      #     file_obj.seek(-10,2)
     print(file_obj.read(5))
     print('当前读取到了 -->',file_obj.tell())

执行结果为:
image.png
可以将上述注释掉的代码自己进行尝试,深入的理解seek和tell的用法。

在文本文件中的用法

上面讲述了在二进制文档中的用法,下面说一下在文本文档中的用法,大体上是差不多的,但是稍微有一点区别。

首先将上述代码复制,并修改mode的值为rt,看一下在文本文件的效果:

with open('demo.txt','rt' ) as file_obj:
    file_obj.seek(55)#切换到55
    print(file_obj.read(10))#读取10个字符的内容并输出
    print('当前读取到了 -->',file_obj.tell())

执行结果为:
image.png
看起来是没有问题的,但是我们再来读取一下其他格式的文档。比如demo2,注意修改编码格式;
文档内容:
image.png
代码如下:

with open('demo2.txt','rt' , encoding='utf-8') as file_obj:
    #从第三个字节开始,一个中文是3个字节
    file_obj.seek(3)
    print(file_obj.read())#读取全文
    print('当前读取到了 -->',file_obj.tell())

执行结果为:
image.png
此时就将第一个汉字跳过了,但是在这里注意一下,一个中文是3个字节,如果seek里面的第一个参数不是3的倍数,那么将会报错!
image.png
所以seek和tell也是可以用于除了ASCII之外的文档的,但是要注意参数的位置。

点击查看配套视频教程

查看更多有关Python的内容,请订阅Python学习站官方技术圈!

相关文章
|
4月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
611 7
|
5月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
491 1
|
6月前
|
API 数据安全/隐私保护 开发者
Python自定义异常:从入门到实践的轻松指南
在Python开发中,自定义异常能提升错误处理的精准度与代码可维护性。本文通过银行系统、电商库存等实例,详解如何创建和使用自定义异常,涵盖异常基础、进阶技巧、最佳实践与真实场景应用,助你写出更专业、易调试的代码。
281 0
|
6月前
|
IDE 开发工具 数据安全/隐私保护
Python循环嵌套:从入门到实战的完整指南
循环嵌套是Python中处理多维数据和复杂逻辑的重要工具。本文通过实例讲解嵌套循环的基本用法、常见组合、性能优化技巧及实战应用,帮助开发者掌握其核心思想,避免常见错误,并探索替代方案与进阶方向。
522 0
|
4月前
|
Cloud Native 算法 API
Python API接口实战指南:从入门到精通
🌟蒋星熠Jaxonic,技术宇宙的星际旅人。深耕API开发,以Python为舟,探索RESTful、GraphQL等接口奥秘。擅长requests、aiohttp实战,专注性能优化与架构设计,用代码连接万物,谱写极客诗篇。
Python API接口实战指南:从入门到精通
|
4月前
|
存储 Java 调度
Python定时任务实战:APScheduler从入门到精通
APScheduler是Python强大的定时任务框架,通过触发器、执行器、任务存储和调度器四大组件,灵活实现各类周期性任务。支持内存、数据库、Redis等持久化存储,适用于Web集成、数据抓取、邮件发送等场景,解决传统sleep循环的诸多缺陷,助力构建稳定可靠的自动化系统。(238字)
888 1
|
8月前
|
Python
Python字符串格式化利器:f-strings入门指南
Python字符串格式化利器:f-strings入门指南
483 80
|
5月前
|
调度 数据库 Python
Python异步编程入门:asyncio让并发变得更简单
Python异步编程入门:asyncio让并发变得更简单
344 5
|
5月前
|
数据采集 存储 XML
Python爬虫入门(1)
在互联网时代,数据成为宝贵资源,Python凭借简洁语法和丰富库支持,成为编写网络爬虫的首选。本文介绍Python爬虫基础,涵盖请求发送、内容解析、数据存储等核心环节,并提供环境配置及实战示例,助你快速入门并掌握数据抓取技巧。

推荐镜像

更多