获取文本文件第一行和最后一行的最有效方法是什么?
问题内容:
我有一个文本文件,每行包含一个时间戳。我的目标是找到时间范围。所有时间都井井有条,因此第一行将是最早的时间,最后一行将是最新的时间。我只需要第一行和最后一行。在python中获取这些行的最有效方法是什么?
注意:这些文件的长度相对较大,每个文件大约1-2百万行,我必须对几百个文件执行此操作。
问题答案:
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)。这将帮助您估算整个运行的价值。