在处理大规模数据文件时,经常遇到需要提取特定行数而非全量加载的场景。一次性读入几百兆的文件不仅耗时,还会占用大量内存。今天分享三种针对 Python 的快速读取方案,覆盖头部、尾部及任意位置的需求。
1. 读取文件头部若干行
这是最直观的场景。利用文件对象的迭代器或 readline 方法即可,注意使用上下文管理器自动关闭文件,避免资源泄露。
with open('test.txt', 'r', encoding='utf-8') as fp:
N_lines = 9 # 设置需要读取的行数
for _ in range(N_lines):
line = fp.readline()
if not line: # 防止文件行数不足
break
print(line, end='')
这里用 with 语句替代了手动 close(),代码更简洁且安全。实际运行时如果文件行数少于设定值,记得加个判断,不然会报错。
2. 读取文件尾部若干行
处理尾部数据稍微复杂些,因为无法直接定位。思路是从文件末尾向前回溯,通过计算字节偏移量来定位起始行。这里采用分块读取的策略,避免一次性 seek 过大导致性能问题。
import os
def read_tail(file_path, n_lines):
with open(file_path, 'rb') as f: # 二进制模式便于 seek
f.seek(0, 2) # 移动到文件末尾
file_size = f.tell()
buffer_size = 1024 * 1024
k = 1
while k * buffer_size <= file_size:
f.seek(-k * buffer_size, 2)
lines = f.read()
count = lines.count(b'\n')
if count <= n_lines:
k +=
:
f.seek(-k * buffer_size, )
content = f.read().decode()
lines_list = content.split()
.join(lines_list[-n_lines:])
(read_tail(, ))

