程序的跑批日志有时候累加的多了会特别的大,如果我们只需要获取文件的后几行的话,就不需要依次遍历。
自定义方法
import os
def file_get_last_lines(file_path, num):
"""
读取大文件的最后几行
:param file_path: 文件路径
:param num: 读取行数
:return:
"""
num = int(num)
blk_size_max = 4096
n_lines = []
with open(file_path, 'rb') as fp:
fp.seek(0, os.SEEK_END)
cur_pos = fp.tell()
while cur_pos > 0 and len(n_lines) < num:
blk_size = min(blk_size_max, cur_pos)
fp.seek(cur_pos - blk_size, os.SEEK_SET)
blk_data = fp.read(blk_size)
assert len(blk_data) == blk_size
lines = blk_data.split(b'\n')
# adjust cur_pos
if len(lines) > 1 and len(lines[0]) > 0:
n_lines[0:0] = lines[1:]
cur_pos -= (blk_size - len(lines[0