我很想,如果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'
答案 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中的空白很重要,您可以在函数内部声明一个函数。