栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Python中解析此自定义日志文件

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Python中解析此自定义日志文件

使用@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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/669344.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号