Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 快速查找日志文件中的行,向后查找,然后逐行读取_Python_File_Search - Fatal编程技术网

Python 快速查找日志文件中的行,向后查找,然后逐行读取

Python 快速查找日志文件中的行,向后查找,然后逐行读取,python,file,search,Python,File,Search,我在日志文件中有行,按时间顺序追加。例如,它可以是过去30天的数据,从30天前开始,然后是29天前,然后是28天前,等等 我希望按照正常的时间顺序读取文件,但从某个点开始(例如,从7天前开始,读取7天前的数据,然后读取6天前的数据,然后读取5天前的数据,等等) 一种方法是正常读取文件,但是出于速度原因,我需要: -从文件末尾以指数方式向后搜索,以找到正确的起点 -然后,一旦我找到了正确的起始点,就按顺序逐行阅读 我很难让它工作。我从这里修改答案开始: 是否有人能提供帮助或指导,找到更好的方法来

我在日志文件中有行,按时间顺序追加。例如,它可以是过去30天的数据,从30天前开始,然后是29天前,然后是28天前,等等

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

一种方法是正常读取文件,但是出于速度原因,我需要: -从文件末尾以指数方式向后搜索,以找到正确的起点 -然后,一旦我找到了正确的起始点,就按顺序逐行阅读

我很难让它工作。我从这里修改答案开始:


是否有人能提供帮助或指导,找到更好的方法来实现这一点?

如果速度是一个问题,这可能意味着你要做很多次,或者必须在飞行中做。因此,您可以构建一个索引文件,显示每天必须搜索的位置,例如:

Day 1: 0
Day 2: 1048576
Day 3: 2097152
Day 4: 6291456
....
一旦建立索引,这将允许快速查找任何一天


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

由于行是连续的,因此您可以非常快速地(按对数N的顺序)到达感兴趣的开始日期,然后从那里向前读取。例如,如果日志文件有十亿行,则最多需要30次读取来查找感兴趣的开始日期……/P>。我会考虑将日志文件分割成多个文件,每个文件覆盖适当的持续时间,以使从一开始就可行。(也就是说,如果你有选择的话)我认为以指数形式向后读取没有多大意义,因为你的计划是从该点向前读取整个文件。以指数方式向后读取,一旦通过了所需的点,再加上二进制搜索,将帮助您在O(logn)时间内找到所需的第一行,但这对您来说只是毫无意义的复杂性,因为从该点向前读取这些行需要O(N)时间。