2011-02-01 38 views
2

我作出了快速的日志解析工具:蟒蛇处理日志文件和剥离字符

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) 

不知道我应该如何去使用类似分区删除“如下:”文本之前,一切它在每行的基础上。我没有得到任何错误,但我试图去除的文本仍然在输出中。

+3

不要使用`file`使用`open`。这甚至不像一个语法上有效的Python。 – SilentGhost 2011-02-01 11:58:50

回答

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]) 
+0

谢谢你,现场 – Mathnode 2011-02-01 12:28:18

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在line'指令 例如,使用findme = '(?<!A)AAA(?!A)',它将根据严格的'AAA'而不是'A AAA'