获取文本文件第一行和最后一行的最有效方法是什么?


问题内容

我有一个文本文件,每行包含一个时间戳。我的目标是找到时间范围。所有时间都井井有条,因此第一行将是最早的时间,最后一行将是最新的时间。我只需要第一行和最后一行。在python中获取这些行的最有效方法是什么?

注意:这些文件的长度相对较大,每个文件大约1-2百万行,我必须对几百个文件执行此操作。


问题答案:

io模块的文档

with open(fname, 'rb') as fh:
    first = next(fh).decode()

    fh.seek(-1024, 2)
    last = fh.readlines()[-1].decode()

此处的变量值为1024:它表示平均字符串长度。例如,我仅选择1024。如果您估算了平均线长,则可以将该值乘以2。

由于您不知道行长的可能上限,因此显而易见的解决方案是遍历文件:

for line in fh:
    pass
last = line

您无需费心可以使用的二进制标志open(fname)

预计 到达时间( ETA)
:由于您有许多文件需要处理,因此您可以使用创建数十个文件的示例,random.sample然后对它们运行此代码以确定最后一行的长度。先验地获得较大的位置偏移值(假设为1
MB)。这将帮助您估算整个运行的价值。