使用@Joran Beasley的答案,我想出了以下解决方案,它似乎有效:
要点:
- 我的日志文件始终采用相同的结构:{日期}-{类型}-{消息},所以我使用了字符串切片和拆分的方法来拆分项目。例如,{日期}始终为23个字符,而我只希望前19个字符。
- 使用line.startswith(“ 2015”)很疯狂,因为日期最终会改变,因此创建了一个使用正则表达式匹配我期望的日期格式的新函数。再次,我的日志日期遵循特定的模式,因此我可以变得特定。
- 该文件被读入第一个函数“ generateDicts()”,然后调用“ matchDate()”函数,以查看正在处理的行是否与我正在寻找的{Date}格式匹配。
- 每当找到有效的{日期}格式时,都会创建一个NEW dict,并且将处理所有操作,直到遇到下一个有效的{日期}为止。
分割日志文件的功能。
def generateDicts(log_fh): currentDict = {} for line in log_fh: if line.startswith(matchDate(line)): if currentDict: yield currentDict currentDict = {"date":line.split("__")[0][:19],"type":line.split("-",5)[3],"text":line.split("-",5)[-1]} else: currentDict["text"] += line yield currentDictwith open("/Users/stevenlevey/documents/out_folder/out_loyaltybox/log_CardsReport_20150522164636.logs") as f: listNew= list(generateDicts(f))查看正在处理的行是否以与我要查找的格式匹配的{日期}开头的函数
def matchDate(line): matchThis = "" matched = re.match(r'dddd-dd-dd dd:dd:dd',line) if matched: #matches a date and adds it to matchThis matchThis = matched.group() else: matchThis = "NONE" return matchThis



