python处理日志文件和剥离字符

时间:2011-02-01 11:53:34

标签: python

我正在制作一个快速的日志解析工具:

findme = 'important '
logf = file('new.txt')
newlines = []

    for line in logf:
        if findme in line:
            line.partition("as follows: ")[2]
            newlines.append(line) 


outfile = file('out.txt', 'w')
outfile.writelines(newlines)

我不知道如何使用分区之类的东西来删除“如下:”以及每行之前的所有内容。我没有收到任何错误,但我试图删除的文本仍保留在输出中。

2 个答案:

答案 0 :(得分:3)

另外,我对这条线感到有点困惑

line.partition("as follows: ")[2]

。它什么都不做。也许你想要

line = line.partition("as follows")[2]

?顺便说一句,最好只在for循环中写入每一行而不是在末尾写一个巨大的writelines。您当前的解决方案将为大型文件使用大量内存,而根本无法使用无限文件。

最终版本看起来像这样:

findme = 'important '
outfile = open('out.txt', 'w')
for line in open('new.txt'):
    if findme in line:
        outfile.write(line.partition('as follows: ')[2])

答案 1 :(得分:1)

这里有正则表达式

import re

findme = 'important ' 
pat = re.compile('.*(%s)?.*as follows: ((?(1).*\n|.*%s.*\n))' % (findme,findme))

with open('new.txt','r') as logf, open('out.txt','w') as outfile:
    for line in logf:
        m = pat.match(line)
        if m: outfile.write( m.group(2) )

优势在于它可以搜索更多特定项目,而不仅仅是',如果在行'指令中找到了 例如,对于findme = '(?<!A)AAA(?!A)',它会根据严格的'AAA'进行搜索,而不是'AAAA'