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

python头,尾和向后按文本文件行读取

亢仰岳
2023-03-14
问题内容

如何在python中实现诸如“ head”和“ tail”命令之类的东西,并通过文本文件的行向后读取?


问题答案:

这是我的个人文件类;-)

class File(file):
    """ An helper class for file reading  """

    def __init__(self, *args, **kwargs):
        super(File, self).__init__(*args, **kwargs)
        self.BLOCKSIZE = 4096

    def head(self, lines_2find=1):
        self.seek(0)                            #Rewind file
        return [super(File, self).next() for x in xrange(lines_2find)]

    def tail(self, lines_2find=1):  
        self.seek(0, 2)                         #Go to end of file
        bytes_in_file = self.tell()
        lines_found, total_bytes_scanned = 0, 0
        while (lines_2find + 1 > lines_found and
               bytes_in_file > total_bytes_scanned): 
            byte_block = min(
                self.BLOCKSIZE,
                bytes_in_file - total_bytes_scanned)
            self.seek( -(byte_block + total_bytes_scanned), 2)
            total_bytes_scanned += byte_block
            lines_found += self.read(self.BLOCKSIZE).count('\n')
        self.seek(-total_bytes_scanned, 2)
        line_list = list(self.readlines())
        return line_list[-lines_2find:]

    def backward(self):
        self.seek(0, 2)                         #Go to end of file
        blocksize = self.BLOCKSIZE
        last_row = ''
        while self.tell() != 0:
            try:
                self.seek(-blocksize, 1)
            except IOError:
                blocksize = self.tell()
                self.seek(-blocksize, 1)
            block = self.read(blocksize)
            self.seek(-blocksize, 1)
            rows = block.split('\n')
            rows[-1] = rows[-1] + last_row
            while rows:
                last_row = rows.pop(-1)
                if rows and last_row:
                    yield last_row
        yield last_row

用法示例:

with File('file.name') as f:
    print f.head(5)
    print f.tail(5)
    for row in f.backward():
        print row


 类似资料:
  • 具有 您可以轻松地在python中读取YAML文件,但它没有得到在末尾我到达错误(与): 但YAML规范允许: YAML使用三个破折号(“--”)将指令与文档内容分开。如果没有指令,这也可以作为文档开始的信号。三个点(“…”)指示文档的结束,但不启动新文档,用于通信通道。 那么,你怎么看这个 在python中?

  • 问题内容: 假设您有一个txt文件,同时查看文件的前10行和后10行的命令是什么? 即,如果文件长200行,则可以一次性查看1-10行和190-200行。 问题答案: 您可以简单地: 如果由于某种原因需要使用管道,则如下所示: 注意:如果file.txt中的行数小于默认的head行+默认的tail行,则将打印重复的行。

  • 本文向大家介绍Python按行读取文件的实现方法【小文件和大文件读取】,包括了Python按行读取文件的实现方法【小文件和大文件读取】的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python按行读取文件的实现方法。分享给大家供大家参考,具体如下: 小文件: 大文件: 更多关于Python相关内容感兴趣的读者可查看本站专题:《Python文件与目录操作技巧汇总》、《Python文本文件操

  • 问题内容: 我想读取不同块的日志文件,以使其成为多线程。该应用程序将在具有多个硬盘的服务器端环境中运行。读取成块后,应用程序将处理每个块的每一行。 我已经用bufferedreader完成了对每个文件行的读取,并且可以通过将RandomAccessFile与MappedByteBuffer结合使用来制作文件块,但是将这两者结合起来并不容易。 问题在于该块正好切入我块的最后一行。我从来没有块的最后一

  • 问题内容: 我想逐行读取巨大的文本文件(如果找到带有“ str”的行,则停止)。如何检查是否到达文件尾? 问题答案: 无需在python中检查EOF,只需执行以下操作: 为什么声明: 在处理文件对象时,最好使用关键字。这样做的好处是,即使在执行过程中引发了异常,文件在其套件完成后也将正确关闭。

  • 问题内容: 使用python从gz压缩的文本文件中读取一行很容易,而无需完全提取该文件?我有一个大约200mb的text.gz文件。当我提取它时,它变成7.4gb。这不是我必须阅读的唯一文件。对于整个过程,我必须读取10个文件。尽管这将是一个顺序的工作,但我认为在不影响全部信息的情况下做到这一点将是明智之举。我什至不知道有可能。如何使用python完成?我需要逐行阅读文本文件。 问题答案: 您是否