20 天学 Python 文件操作:Day 4 文件指针与定位技巧

昨天我们学习了文件的写入操作。今天,我们将深入了解文件指针的概念以及如何在文件中定位和操作数据。这对处理大型文件或需要精确读取的场景尤为重要。

什么是文件指针?

文件指针是一种标记,指示当前读写操作在文件中的位置。打开文件后,文件指针默认位于文件的开头,随后会随着读写操作而移动。

Python 提供了几个方法来操作文件指针:

方法

作用

tell()

获取文件指针的当前位置(字节)。

seek(offset, whence)

移动文件指针到指定位置。

1. 获取文件指针位置:tell()方法

tell() 方法返回文件指针的当前位置,单位是字节。

示例:

with open('example.txt', 'r') as file:
    content = file.read(5)  # 读取前 5 个字节
    print(file.tell())      # 输出:5

文件内容为 "Hello, Python!" 时,读取 "Hello" 后,文件指针会移动到第 5 个字节。

2. 移动文件指针:seek()方法

seek() 方法用于将文件指针移动到指定位置。它的语法如下:

file.seek(offset, whence)
  • offset: 偏移量,单位是字节。
  • whence: 参考位置,默认值为 0。
    • 0: 文件开头(默认值)。
    • 1: 当前指针位置。
    • 2: 文件末尾。

示例 1:移动到文件开头

with open('example.txt', 'r') as file:
    file.seek(0)  # 将指针移动到文件开头
    print(file.read(5))  # 输出:Hello

示例 2:从当前指针位置偏移

with open('example.txt', 'r') as file:
    file.read(5)          # 读取前 5 个字节
    file.seek(2, 1)       # 向后移动 2 个字节
    print(file.read(5))   # 输出:, Py

示例 3:移动到文件末尾

with open('example.txt', 'r') as file:
    file.seek(0, 2)       # 移动到文件末尾
    print(file.tell())    # 输出文件总字节数

3. 随机访问文件内容

结合 tell() 和 seek(),我们可以灵活读取文件的特定部分。

示例:读取文件中间的内容

假设文件 example.txt 内容如下:

Hello, Python!

我们想读取从第 7 到第 12 个字节的内容:

with open('example.txt', 'r') as file:
    file.seek(7)          # 将指针移动到第 7 个字节
    print(file.read(5))   # 输出:Python

练习任务

  1. 创建一个文本文件 data.txt,内容为:
  2. Line 1: Hello, World! Line 2: Python is amazing. Line 3: Keep learning!
  3. 使用 tell() 和 seek() 方法完成以下操作:
  4. 读取第一行的内容。
  5. 跳过第二行,直接读取第三行。
  6. 计算文件总字节数。
  7. 编写一个函数 read_last_n_bytes(file_name, n),从文件末尾读取指定字节数。

示例函数:

def read_last_n_bytes(file_name, n):
    with open(file_name, 'rb') as file:
        file.seek(-n, 2)  # 从文件末尾向前移动 n 个字节
        return file.read()

print(read_last_n_bytes('data.txt', 10))

完成这些任务后,你将对文件指针的操作有更加全面的理解。明天,我们将学习如何处理二进制文件,敬请期待!

原文链接:,转发请注明来源!