2012-03-25 46 views
1

我在日志文件中有行,按时间顺序添加。例如,它可能是最近30天的数据,从30天前开始,然后是29天前,然后是28天前等。从日志文件中快速查找行,向后查找,然后逐行读取

我想按正常时间顺序读取文件,但从某个点(例如,7天前开始,7天前读取数据,然后6天前数据,然后5天前数据等)

一种方法是正常读取文件,但出于速度原因,我将需要于: - 从文件末尾寻求落后,指数,找到合适的点 开始 - 那么,一旦我找到了正确的点开始,读取文本行的一个接一个,以正向顺序

我无法正常工作。我开始修改答案在这里: Most efficient way to search the last x lines of a file in python

有人可以帮助,或提供更好的方式做到这一点的指导?

+0

我会考虑将日志文件分成多个文件 - 每个文件都包含一个适当的持续时间从一开始就寻求可行。 (也就是说,如果你有选择的话) – 2012-03-25 15:57:39

+4

因为你的计划是从那一点开始读取*整个文件,所以我不认为在后向*指数阅读方面有太多的意义。按照指数方式读取,加上二分搜索,一旦你通过了你想要的点,将帮助你在O(log N)时间找到第一个需要的行,但这对你来说没有多大意义,因为它会带你O(N)有时间阅读这一点。 – ruakh 2012-03-25 15:58:28

回答

2

如果速度是一个问题,那可能意味着你正在做很多次,或者不得不在飞行中这样做。因此,你可以建立一个索引文件显示象,你必须seek的位置的每一天,东西:

Day 1: 0 
Day 2: 1048576 
Day 3: 2097152 
Day 4: 6291456 
.... 

这将允许任何一天的快速查找,一旦构建索引。

用于更新此索引的算法将从最后一个已知日子的位置开始,向前读取,并且每次您到达新的一天时将其添加到索引。

0

由于线是连续的,您可以非常快速地执行half-interval search(日志N的顺序)到感兴趣的开始日,然后从那里读取。例如,如果日志文件具有十亿行,则最多需要30次读取才能找到感兴趣的开始日期...