当前位置: 首页 > 面试题库 >

使用Python获取文件的最后n行,类似于tail

充星腾
2023-03-14
问题内容

我正在为Web应用程序编写日志文件查看器,为此,我想在日志文件的各行中进行分页。文件中的项目是基于行的,底部是最新的项目。

因此,我需要一种tail()可以n从底部读取行并支持偏移量的方法。我想到的是这样的:

def tail(f, n, offset=0):
    """Reads a n lines from f with an offset of offset lines."""
    avg_line_length = 74
    to_read = n + offset
    while 1:
        try:
            f.seek(-(avg_line_length * to_read), 2)
        except IOError:
            # woops.  apparently file is smaller than what we want
            # to step back, go to the beginning instead
            f.seek(0)
        pos = f.tell()
        lines = f.read().splitlines()
        if len(lines) >= to_read or pos == 0:
            return lines[-to_read:offset and -offset or None]
        avg_line_length *= 1.3

这是合理的方法吗?建议使用带偏移量尾部日志文件的推荐方式是什么?


问题答案:
def tail(f, n, offset=None):
    """Reads a n lines from f with an offset of offset lines.  The return
    value is a tuple in the form ``(lines, has_more)`` where `has_more` is
    an indicator that is `True` if there are more lines in the file.
    """
    avg_line_length = 74
    to_read = n + (offset or 0)

    while 1:
        try:
            f.seek(-(avg_line_length * to_read), 2)
        except IOError:
            # woops.  apparently file is smaller than what we want
            # to step back, go to the beginning instead
            f.seek(0)
        pos = f.tell()
        lines = f.read().splitlines()
        if len(lines) >= to_read or pos == 0:
            return lines[-to_read:offset and -offset or None], \
                   len(lines) > to_read or pos > 0
        avg_line_length *= 1.3


 类似资料:
  • 本文向大家介绍Python实现读取文件最后n行的方法,包括了Python实现读取文件最后n行的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现读取文件最后n行的方法。分享给大家供大家参考,具体如下: 以上处理和日志文件格式为 读取最后一行: 更多关于Python相关内容感兴趣的读者可查看本站专题:《Python文件与目录操作技巧汇总》、《Python文本文件操作技巧汇总

  • 问题内容: 我想读取一个非常大的文件的最后n行,而不使用Java将整个文件读入任何缓冲区/内存区域。 我环顾了JDK API和Apache Commons I / O,但无法找到适合此目的的一个。 我在想UNIX中使用tail或更少的方式。我认为他们不会加载整个文件,然后显示文件的最后几行。在Java中也应该有类似的方法。 问题答案: 如果使用,则可以使用和到达文件末尾附近的特定点,然后从那里开始

  • 问题内容: 我有pandas数据帧和(df1是vanila数据帧,df2由’STK_ID’和’RPT_Date’索引): 我可以通过以下方式获得df2的最后3行: 同时给所有行: 为什么呢 如何获取(没有索引的数据帧)的最后3行?熊猫0.10.1 问题答案: 别忘了!例如

  • 问题内容: 我想从文件末尾删除一些 n 行。可以使用sed完成此操作吗? 例如,要删除2到4行,我可以使用 但是我不知道行号。我可以使用删除最后一行 但我想知道从末尾删除 n 行的方法。请让我知道如何使用sed或其他方法进行操作。 问题答案: 我不知道,但是可以用:

  • 如何使用批处理脚本从文件中删除最后n行 我对批处理文件没有任何想法,我是第一次编写批处理文件。 我应该如何编写此批处理文件? 对于Windows7 试一试

  • 问题内容: 如何使用python删除文件的最后一行? 输入文件示例: 输出文件示例: 我创建了以下代码来查找文件中的行数-但我不知道如何删除特定的行号。 问题答案: 您可以使用上面的代码,然后: 这将为您提供包含除最后一行以外的所有行的行数组。