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学习站官方技术圈!

相关文章
|
15天前
|
分布式计算 大数据 数据处理
Python入门与大数据处理环境配置指南
**Python入门与大数据处理环境配置** Python作为高级编程语言,因其简洁语法和丰富库资源,成为数据处理、AI和大数据分析首选。本文旨在介绍Python基础和环境配置,特别是针对大数据处理的环境搭建。首先,讲解Python语言基础,包括语言概述、基本语法(变量、数据类型、控制流语句、函数和模块)。接着,讨论如何安装Python环境,以及安装NumPy、Pandas等大数据处理库。对于大数据处理,可以选择本地环境或搭建分布式环境,如Hadoop和Spark,并提供相关API示例。最后,列出环境配置中可能遇到的问题及解决方案,如版本不兼容、库安装失败等,并提供参考资料以供深入学习。
33 3
|
19天前
|
人工智能 IDE 开发工具
【Python学习篇】Python基础入门学习——你好Python(一)
【Python学习篇】Python基础入门学习——你好Python(一)
24 1
|
12天前
|
IDE 开发工具 Python
Python初学者如何入门?
【6月更文挑战第14天】Python初学者如何入门?
19 5
|
14天前
|
开发者 Python
入门实战丨Python小游戏经典案例
入门实战丨Python小游戏经典案例
20 4
|
12天前
|
开发者 Python
GitHub飙升!京东认证的“Python编程入门三剑客”究竟好在哪?
Python凭借着简单易学、功能强大,已经跃居TIOB编程语言榜首,并且已经开始了它的霸榜之旅。如何选择一套适合自己的Python学习教程,是每个Python爱好者面临的首要问题。
|
14天前
|
机器学习/深度学习 算法 数据挖掘
机器学习新手也能飞:Python+Scikit-learn让你轻松入门!
【6月更文挑战第12天】Python和Scikit-learn降低了机器学习的门槛,让初学者也能轻松涉足。Python以其易用性及丰富的库支持成为机器学习首选语言,而Scikit-learn作为开源机器学习库,提供多种算法和工具。通过简单示例展示了如何使用两者处理鸢尾花数据集进行分类,体现其在实践中的高效便捷。掌握这两者,能助你在机器学习领域不断探索和创新。
|
19天前
|
数据可视化 API Python
豆瓣评分9.4!堪称经典的Python入门圣经,你还没看过吗?
最理想的新人入门书应该满足两个特点:第一就是内容通俗易懂;第二就是要有实战,能够让读者在学完之后知道具体怎么用。 今天给小伙伴们分享的这份Python入门手册,在为初学者构建完整的Python语言知识体系的同时,面向实际应用情境编写代码样例,而且许多样例还是后续实践项目部分的伏笔。实践项目部分的选题经过精心设计,生动详尽又面面俱到。
|
19天前
|
存储 Python
【Python学习篇】Python基础入门学习——Python基础语法(二)
【Python学习篇】Python基础入门学习——Python基础语法(二)
39 1
|
20天前
|
开发者 Python
GitHub飙升!京东认证的“Python编程入门三剑客”究竟好在哪?
Python凭借着简单易学、功能强大,已经跃居TIOB编程语言榜首,并且已经开始了它的霸榜之旅。如何选择一套适合自己的Python学习教程,是每个Python爱好者面临的首要问题。 今天给小伙伴们带来的是图灵&京东认证的“Python编程入门三剑客”,先看《Python编程从入门到实践》,打好Python入门的底子;再看《Python编程快速上手》,增强用Python处理工作中实际问题的能力;最后看《Python极客项目编程》,用充满想象力的实战案例,充分理解Python编程的奥秘,完成从小白到大神的进化。
|
18小时前
|
分布式计算 数据挖掘 索引
26段简短代码入门Python
26段简短代码入门Python