|
|
1
5
这可能比你的快。对线路长度不作任何假设。一次返回一个块,直到找到正确数量的'\n'字符。
通常,这将在通过环路的第一个或第二个通道上定位最后20条线。如果你的74个字符的东西实际上是准确的,你使块大小2048,你会尾随20行几乎立即。 另外,我也不会在尝试与物理操作系统模块协调时消耗大量的大脑热量。使用这些高级I/O包,我怀疑您是否会看到尝试在操作系统块边界上对齐的任何性能后果。如果使用较低级别的I/O,则可能会看到加速。 使现代化 对于Python3.2及更高版本,请按照文本文件(那些打开时未使用 “b” 在模式字符串中),仅允许相对于文件开头的查找(例外情况是使用查找(0,2)查找文件结尾):
如:
|
|
|
2
1
对于python 3,您可以执行以下操作:
|
|
|
3
0
这是我的答案。纯python。使用timeit看起来相当快。跟踪包含100000行的日志文件的100行:
代码如下:
|
|
|
4
0
如果可以读取整个文件,则使用deque。
在2.6之前,deques没有maxlen选项,但它很容易实现。
如果需要从末尾读取文件,则使用gallop(也称为指数)搜索。
|