昨天我们学习了文件的写入操作。今天,我们将深入了解文件指针的概念以及如何在文件中定位和操作数据。这对处理大型文件或需要精确读取的场景尤为重要。
什么是文件指针?
文件指针是一种标记,指示当前读写操作在文件中的位置。打开文件后,文件指针默认位于文件的开头,随后会随着读写操作而移动。
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
练习任务
- 创建一个文本文件 data.txt,内容为:
- Line 1: Hello, World! Line 2: Python is amazing. Line 3: Keep learning!
- 使用 tell() 和 seek() 方法完成以下操作:
- 读取第一行的内容。
- 跳过第二行,直接读取第三行。
- 计算文件总字节数。
- 编写一个函数 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))
完成这些任务后,你将对文件指针的操作有更加全面的理解。明天,我们将学习如何处理二进制文件,敬请期待!