使用python解析带有pyparsing的file.log时出错

时间:2016-05-01 20:38:22

标签: python python-2.7 parsing pyparsing

我很想,如果somone可以帮我解决这个错误原因 我是pyparsing的初学者,我想解析一个我的日志文件:

Memory: svmem(total=4014465024, available=3451576320, percent=14.0, used=1240055808, free=2774409216, active=543842304, inactive=525877248, buffers=82866176, cached=594300928)
CPU: 35.70 % 
Elapsed execution time: 0.642941951752 seconds

这是我的parsing.py文件:

import sys 
import os
from pyparsing import Word, ZeroOrMore, Group, White, Optional, printables, ParseException, restOfLine, alphas, alphanums, nums, Suppress, Combine, LineStart 

class Parser(object):
    def __init__(self):
        Mem = Word(alphanums) + Suppress(":") + Suppress(Word(alphas)) + Suppress("(")
        val1 = Word(alphanums) + "=" + Word(nums) + Suppress(",") 
        val2 = Word(alphanums) + "=" + Word(nums) + Suppress(",") 
        val3 = Word(alphanums) + "=" + Word(nums + '.') + Suppress(",") 
        val4 = Word(alphanums) + "=" + Word(nums) + Suppress(",") 
        val5 = Word(alphanums) + "=" + Word(nums) + Suppress(",") 
        val6 = Word(alphanums) + "=" + Word(nums) + Suppress(",") 
        val7 = Word(alphanums) + "=" + Word(nums) + Suppress(",") 
        val8 = Word(alphanums) + "=" + Word(nums) + Suppress(",") 
        val9 = Word(alphanums) + "=" + Word(nums) + Suppress(")") 
        cpu = Word(alphanums) + ":" + Word(nums) + Suppress("%") 
        time = Word(alphanums) + ":" + Word(nums + '.') + Suppress(Word(alphas)) 
        #Metrics = Combine(Mem + val1 + val2 + val3 + val4 + val5 + val6 + val7 + val8 + val9)  
        self.__pattern = Mem + val1 + val2 + val3 + val4 + val5 + val6 + val7 + val8 + val9 + cpu + time

    def parse(self, line):
        parsed = self.__pattern.parseString(line)

        payload              = {}
        payload["Mem"]  = parsed[0]
        payload["val1"]  = parsed[1]
        payload["val2"]  = parsed[2]
        payload["val3"]  = parsed[3]
        payload["val4"]  = parsed[4]
        payload["val5"]  = parsed[5]
        payload["val6"]  = parsed[6]
        payload["val7"]  = parsed[7]
        payload["val8"]  = parsed[8]
        payload["val9"]  = parsed[9]
        payload["cpu"]  = parsed[10]
        payload["time"]   = parsed[11]


        return payload

        """ --------------------------------- """

def main():
  parser = Parser()

  with open('./perf.log') as syslogFile:
     for line in syslogFile:
         if line != "\n":
            fields = parser.parse(line)
       print "parsed:", fields

if __name__ == "__main__":
    main()

这是错误消息:

Traceback (most recent call last):
  File "xlog.py", line 54, in <module>
    main()
  File "xlog.py", line 50, in main
    fields = parser.parse(line)
AttributeError: 'Parser' object has no attribute 'parse'

1 个答案:

答案 0 :(得分:1)

您的缩进似乎不正确。看来您的>>> test_str = "/*\n test.cpp\n *\n *\n *\n\t2013.02.30\n *\n */\n" >>> test_str.encode('unicode_escape') b'/*\\n test.cpp\\n *\\n *\\n *\\n\\t2013.02.30\\n *\\n */\\n' 方法已在parse内声明。请记住,Python中的空白很重要,您可以在函数内部声明一个函数。