如何用python获取文件的最后一行,文件可能会比较大

如题所述

#!/usr/bin/env python
import os
import sys

def get_last_n_lines(logfile, n):
    blk_size_max = 4096
    n_lines = []
    with open(logfile, 'rb') as fp:
        fp.seek(0, os.SEEK_END)
        cur_pos = fp.tell()
        while cur_pos > 0 and len(n_lines) < n:
            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('\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]))
            else:
                n_lines[0:0] = lines
                cur_pos -= blk_size
            fp.seek(cur_pos, os.SEEK_SET)

    if len(n_lines) > 0 and len(n_lines[-1]) == 0:
        del n_lines[-1]
    return n_lines[-n:]

def main():
    if len(sys.argv) != 3:
        sys.exit('usage: %s logfile n_lines' % sys.argv[0])
    for line in get_last_n_lines(sys.argv[1], int(sys.argv[2])):
        print line

if __name__ == '__main__':
    main()

Linux平台有一个tail命令,tail -f filename.log 就会打印文件最后新增加的内容
 
这个也可以

温馨提示:答案为网友推荐,仅供参考
相似回答