读取文件的前N mb

时间:2018-12-28 20:40:09

标签: python

我正在寻找文件的前Nmb。这是一个基本的实现:

def get_first_n_mb(self, file=None, n=5):
    """
    Will return the first 5 (or N) MB of the passed file
    """
    file = file or self.file

    with open(file, 'rb') as fp:
        file_data = self.file_first_n_mb = fp.read(1e6 * n)

    return file_data

但是,用户可能会传递较大的数字,例如n = 1000,在这种情况下,我们希望对读取进行分块。做块的合适“大小”是什么,还是上述方法仍然有效?该如何改善?

1 个答案:

答案 0 :(得分:1)

read()允许返回的金额少于您要求的金额。您应该循环调用它,直到达到请求的数量或EOF。您需要根据上次阅读的大小来减少阅读量。

def get_first_n_mb(self, file=None, n=5):
    file = file or self.file
    amt = 1e6 * n
    file_data = ''
    with open(file, 'rb') as fp:
        while amt > 0:
            try:
                block = fp.read(amt)
                file_data += block
                amt -= len(block)
            except EOFError:
                break
    return file_data

对于普通文件,read()通常会返回您所请求的内容,只要文件那么长。但是其他类型的流通常返回的较少(例如,从终端读取数据通常仅返回一行)。