seek()方法用于调整文件指针位置,语法为file.seek(offset, whence),其中offset为偏移量,whence指定起始位置(0开头、1当前位置、2末尾)。文本模式下whence只能为0,二进制模式支持1和2。常与tell()配合使用,可实现精确读写。推荐用with语句管理文件资源,避免遗漏close()。

在 Python 中,seek() 方法用于调整文件指针的位置,也就是控制从文件的哪个位置开始读取或写入数据。它常与 open() 函数配合使用,特别是在处理文本或二进制文件时非常有用。
基本语法
file.seek(offset, whence)
- offset:偏移量,表示移动的字节数。
- whence:可选参数,指定从哪里开始计算偏移,默认为 0。
whence 的取值有:
- 0:从文件开头开始(默认),offset 应为非负数。
- 1:从当前位置开始,需以二进制模式打开文件(如 'rb')。
- 2:从文件末尾开始,通常用于反向定位。
常见用法示例
1. 从文件开头移动指针
立即学习“Python免费学习笔记(深入)”;
将指针移动到文件第 5 个字节处,然后读取后续内容:
f = open('test.txt', 'r')f.seek(5) # 跳过前5个字符
content = f.read()
print(content)
f.close()
2. 结合 tell() 使用
在整本书中我们所涉及许多的Flex框架源码,但为了简洁,我们不总是显示所指的代码。当你阅读这本书时,要求你打开Flex Builder,或能够访问Flex3框架的源码,跟随着我们所讨论源码是怎么工作及为什么这样做。 如果你跟着阅读源码,请注意,我们经常跳过功能或者具体的代码,以便我们可以对应当前的主题。这样能防止我们远离当前的主题,主要是讲解代码的微妙之处。这并不是说那些代码的作用不重要,而是那些代码处理特别的案例,防止潜在的错误或在生命周期的后面来处理,只是我们当前没有讨论它。有需要的朋友可以下载看看
tell() 返回当前文件指针的位置,可以和 seek() 配合实现定位操作:
f = open('test.txt', 'r')print(f.tell()) # 输出 0,指针在开头
f.seek(3)
print(f.tell()) # 输出 3
f.close()
3. 从文件末尾反向定位
适用于读取大文件的最后几行,比如日志文件:
f = open('test.txt', 'rb') # 必须是二进制模式f.seek(-10, 2) # 从末尾往前移动10个字节
data = f.read().decode() # 读取并解码为字符串
print(data)
f.close()
注意事项
- 文本模式下(如 'r' 或 'w'),whence 只能为 0,且 offset 必须是非负数。
- 如果要在当前位置或文件末尾定位,必须以二进制模式打开文件('rb', 'wb' 等)。
- seek 超出文件范围不会立即报错,但读取时可能得不到数据。
- 使用完文件记得调用 close(),或使用 with 语句自动管理资源。
推荐使用 with 语句更安全:
with open('test.txt', 'r') as f:f.seek(5)
print(f.read())
基本上就这些。掌握 seek 能让你更灵活地操作文件内容,尤其是在处理大型或结构化文件时特别有用。










