3

我想在两个日期之间的日期排序日志文件中搜索一系列行。如果我在命令行,sed会派上用场:

sed -rn '/03.Nov.2012/,/12.Oct.2013/s/search key/search key/p' my.log

以上将仅显示 2012 年 11 月 3 日和 2013 年 10 月 12 日之间包含字符串“ search key”的行。

有没有一种轻量级的方法可以做到这一点python

我可以为上述构建单个 RE,但这将是噩梦。

我能想到的最好的是:

#!/usr/bin/python

start_date = "03/Nov/2012"
end_date = "12/Oct/2013"

start = False

try:
    with open("my.log",'r') as log:
        for line in log:
            if start:
                if end_date in line:
                    break
            else:
                if start_date in line:
                    start = True
                else:
                    continue
            if search_key in line:
                print line

except IOError, e:
    print '<p>Log file not found.'

但这让我觉得不是'pythonic'。

可以假设将在日志文件中找到搜索日期限制。

4

1 回答 1

5

使用itertools和生成器是一种方法:

from itertools import takewhile, dropwhile

with open('logfile') as fin:
    start = dropwhile(lambda L: '03.Nov.2012' not in L, fin)
    until = takewhile(lambda L: '12.Oct.2013' not in L, start)
    query = (line for line in until if 'search string' in line)
    for line in query:
        pass # do something
于 2013-10-21T18:54:39.473 回答