#!/home/kay/venv/bin/python from pyparsing import Word, alphas, Suppress, Combine, nums, string, Optional, Regex, Empty, Literal from time import strftime class Parser(object): def __init__(self): ints = Word(nums) # priority priority = Suppress("<") + ints + Suppress(">") # timestamp month = Word(string.ascii_uppercase, string.ascii_lowercase, exact=3) day = ints hour = Combine(ints + ":" + ints + ":" + ints) timestamp = month + day + hour # hostname hostname = Word(alphas + nums + "_" + "-" + ".") # appname appname = Word(alphas + "/" + "-" + "_" + ".") + Optional(Suppress("[") + ints + Suppress("]"),default=Literal('')) + Suppress(": ") # message message = Regex(r"(.*)") # pattern build self.__pattern = timestamp + hostname + appname + message print(self.__pattern) print(repr(self.__pattern)) def parse(self, line): parsed = self.__pattern.parseString(line) payload = {} payload["timestamp"] = strftime("%Y-%m-%d %H:%M:%S") payload["hostname"] = parsed[3] payload["appname"] = parsed[4] payload["pid"] = parsed[5] payload["message"] = parsed[6] return payload """ --------------------------------- """ def main(): parser = Parser() with open(r'd:\dev\email-pyr\syslog') as syslogFile: for line in syslogFile: fields = parser.parse(line) print("parsed:", fields) if __name__ == "__main__": main()