Python seek()和tell()函数的具体使用

 更新时间:2023年02月17日 14:31:17   作者:NOGE2022  
本文主要介绍了Python seek()和tell()函数的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在讲解 seek() 函数和 tell() 函数之前,首先来了解一下什么是文件指针。

我们知道,使用 open() 函数打开文件并读取文件中的内容时,总是会从文件的第一个字符(字节)开始读起。那么,有没有办法可以自定指定读取的起始位置呢?答案是肯定,这就需要移动文件指针的位置。

文件指针用于标明文件读写的起始位置。假如把文件看成一个水流,文件中每个数据(以 b 模式打开,每个数据就是一个字节;以普通模式打开,每个数据就是一个字符)就相当于一个水滴,而文件指针就标明了文件将要从文件的哪个位置开始读起。图 1 简单示意了文件指针的概念。

图 1 文件指针概念示意图

可以看到,通过移动文件指针的位置,再借助 read() 和 write() 函数,就可以轻松实现,读取文件中指定位置的数据(或者向文件中的指定位置写入数据)。

注意,当向文件中写入数据时,如果不是文件的尾部,写入位置的原有数据不会自行向后移动,新写入的数据会将文件中处于该位置的数据直接覆盖掉。
实现对文件指针的移动,文件对象提供了 tell() 函数和 seek() 函数。tell() 函数用于判断文件指针当前所处的位置,而 seek() 函数用于移动文件指针到文件的指定位置。

tell() 函数

tell() 函数的用法很简单,其基本语法格式如下:

file.tell()

其中,file 表示文件对象。

例如,在同一目录下,编写如下程序对 a.txt 文件做读取操作,a.txt 文件中内容为:

http://csdn.net

读取 a.txt 的代码如下:

f =open("a.txt",'r')
print(f.tell())
print(f.read(3))
print(f.tell())

运行结果为:

0
htt
3

可以看到,当使用 open() 函数打开文件时,文件指针的起始位置为 0,表示位于文件的开头处,当使用 read() 函数从文件中读取 3 个字符之后,文件指针同时向后移动了 3 个字符的位置。这就表明,当程序使用文件对象读写数据时,文件指针会自动向后移动:读写了多少个数据,文件指针就自动向后移动多少个位置。

seek()函数

seek() 函数用于将文件指针移动至指定位置,该函数的语法格式如下:

file.seek(offset[, whence])

其中,各个参数的含义如下:

  • file:表示文件对象;
  • whence:作为可选参数,用于指定文件指针要放置的位置,该参数的参数值有 3 个选择:0 代表文件头(默认值)、1 代表当前位置、2 代表文件尾。
  • offset:表示相对于 whence 位置文件指针的偏移量,正数表示向后偏移,负数表示向前偏移。例如,当whence == 0 &&offset == 3(即 seek(3,0) ),表示文件指针移动至距离文件开头处 3 个字符的位置;当whence == 1 &&offset == 5(即 seek(5,1) ),表示文件指针向后移动,移动至距离当前位置 5 个字符处。

注意,当 offset 值非 0 时,Python 要求文件必须要以二进制格式打开,否则会抛出 io.UnsupportedOperation 错误。

下面程序示范了文件指针操作:

f =open('a.txt','rb')
# 判断文件指针的位置
print(f.tell())
# 读取一个字节,文件指针自动后移1个数据
print(f.read(1))
print(f.tell())
# 将文件指针从文件开头,向后移动到 5 个字符的位置
f.seek(5)
print(f.tell())
print(f.read(1))
# 将文件指针从当前位置,向后移动到 5 个字符的位置
f.seek(5,1)
print(f.tell())
print(f.read(1))
# 将文件指针从文件结尾,向前移动到距离 2 个字符的位置
f.seek(-1,2)
print(f.tell())
print(f.read(1))

运行结果为:

0
b'h'
1
5
b'/'
11
b'a'
21
b't'
————————————————

到此这篇关于Python seek()和tell()函数的具体使用的文章就介绍到这了,更多相关Python seek() tell()内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python如何使用matplotlib绘制柱状图

    Python如何使用matplotlib绘制柱状图

    这篇文章主要介绍了Python如何使用matplotlib绘制柱状图问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • python中Tkinter实现分页标签的示例代码

    python中Tkinter实现分页标签的示例代码

    这篇文章主要介绍了python中Tkinter实现分页标签的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Python三百行代码实现飞机大战

    Python三百行代码实现飞机大战

    飞机大战想必大家可能玩过微信的这款小游戏,给我的感觉是这款游戏怎么可以做得这么好呢,操作简单,容易上手,简直是“老少皆宜”啊,既然这款游戏这么棒,能否自己动手用 Python 来实现呢?事实证明是可以的
    2022-09-09
  • python查询文件夹下excel的sheet名代码实例

    python查询文件夹下excel的sheet名代码实例

    这篇文章主要介绍了python查询文件夹下excel的sheet名方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Python实现将wav转amr,并转换成hex数组

    Python实现将wav转amr,并转换成hex数组

    这篇文章主要介绍了Python实现将wav转amr,并转换成hex数组方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • python实点云分割k-means(sklearn)详解

    python实点云分割k-means(sklearn)详解

    这篇文章主要为大家详细介绍了Python实点云分割k-means,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • PyExecJS无法安装的问题解决

    PyExecJS无法安装的问题解决

    我们需要在Python中执行一些JavaScript代码时,可能需要使用到execjs模块,本文主要介绍了PyExecJS无法安装的问题解决,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • 浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点

    浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点

    这篇文章主要介绍了浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • NumPy双曲函数与集合操作详解

    NumPy双曲函数与集合操作详解

    NumPy 提供了 sinh()、cosh() 和 tanh() 等 ufunc,它们接受弧度值并生成相应的双曲正弦、双曲余弦和双曲正切值,我们可以使用 NumPy 的 unique() 方法从任何数组中找到唯一元素,本文给大家详细介绍了NumPy双曲函数与集合操作,需要的朋友可以参考下
    2024-06-06
  • python批量爬取下载抖音视频

    python批量爬取下载抖音视频

    这篇文章主要为大家详细介绍了python批量爬取下载抖音视频,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06

最新评论