ZetCode

Python tell 函数

最后修改时间:2025 年 3 月 26 日

本综合指南探讨 Python 的 tell 函数,该函数返回文件指针的当前位置。 我们将介绍它在不同文件模式下的用法、实际示例以及 Python 中文件位置跟踪的最佳实践。

基本定义

tell() 方法返回一个整数,表示文件中文件指针的当前位置。 该位置以从文件开头开始的字节数来衡量。 它对于跟踪进度或稍后返回到特定位置很有用。

打开文件时,位置从 0 开始(文件开头)。 读取或写入操作会将指针向前移动。 tell 函数适用于文本文件和二进制文件,但行为略有不同。

tell 的基本用法

此示例演示了 tell 的最简单用法,以显示读取一些数据之前和之后的当前文件位置。

basic_tell.py
with open('example.txt', 'r') as file:
    print("Initial position:", file.tell())
    data = file.read(10)  # Read first 10 bytes
    print("After reading 10 bytes:", file.tell())
    print("Data read:", data)

该代码打开一个文件并立即检查位置 (0)。 读取 10 个字节后,位置前进到 10。 这表明 tell 如何跟踪文件指针在操作期间的移动。

tell 与二进制文件

二进制文件提供精确的位置跟踪,因为不会发生字符编码转换。 此示例显示了字节精确的定位。

binary_tell.py
with open('image.jpg', 'rb') as file:
    print("Start:", file.tell())
    file.read(100)  # Skip header
    print("After header:", file.tell())
    chunk = file.read(1024)
    print("After 1KB read:", file.tell())

这读取一个二进制文件(JPEG 图像),显示跳过 100 字节的标头并读取 1KB 块后的位置。 二进制模式确保读取的每个字节与 tell 报告的位置完全对应。

tell 与文本文件

由于换行符转换和编码,文本文件可能会显示不同的行为。 此示例演示了文本模式下的位置跟踪。

text_tell.py
with open('textfile.txt', 'r') as file:
    print("Position before read:", file.tell())
    line = file.readline()
    print("First line:", line)
    print("Position after read:", file.tell())
    file.seek(0)
    print("Position after seek:", file.tell())

该代码读取一行并显示之前和之后的位置。 请注意,在文本模式下,由于换行符转换,tell 可能与字节位置不完全对应。 该位置仍可用于 seek

在写入模式下使用 tell

写入文件时,tell 显示下一次写入将发生的位置。 此示例演示了文件写入期间的位置跟踪。

write_tell.py
with open('output.txt', 'w') as file:
    print("Start position:", file.tell())
    file.write("First line\n")
    print("After first write:", file.tell())
    file.write("Second line\n")
    print("After second write:", file.tell())

每个写入操作都会前进文件指针,如 tell 所示。 在写入模式下,该位置始终指示将写入新数据的位置。 \n 字符在位置中每个字符计为一个字节。

tell 与 seek 结合

此示例演示了 tellseek 如何协同工作以进行随机文件访问。

seek_tell.py
with open('data.bin', 'rb+') as file:
    print("Initial position:", file.tell())
    file.seek(50)
    print("After seek to 50:", file.tell())
    file.write(b'X')
    print("After write:", file.tell())
    file.seek(0, 2)  # Seek to end
    print("File size:", file.tell())

该代码演示了移动到位置 50、写入一个字节,然后通过查找结尾来检查文件大小。 tell 函数验证每个操作对文件位置的影响。

最佳实践

资料来源

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。 我自 2007 年以来一直在撰写编程文章。 迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 Python 教程