为了账号安全,请及时绑定邮箱和手机立即绑定

用 Python re 挖掘信息

用 Python re 挖掘信息

慕雪6442864 2022-05-11 17:10:25
我想从日志文件中挖掘信息并编写以下脚本:import refile = '''Date,Time,Type,User,MessageThu Jul 18, 2019 14:18:41.945,EFM,201202      ,Robot pickedThu Jul 18, 2019 14:18:51.486,DS ,201202      ,Module 1Thu Jul 18, 2019 14:19:07.747,DS ,201202      ,Door openedThu Jul 18, 2019 14:20:08.231,EFM,203204205206,Robot pickedThu Jul 18, 2019 14:20:08.231,DS ,203204      ,Module 2Thu Jul 18, 2019 14:20:10.282,DS ,203204      ,Door opened...'''p1 = re.compile(r'\w{3} \w{3} \d\d, \d{4} (\d\d:\d\d:\d\d.\d{3}),EFM,(\d+?\s*?),Robot picked')p2 = re.compile(r'\w{3} \w{3} \d\d, \d{4} (\d\d:\d\d:\d\d.\d{3}),DS ,(\d+?\s*?),Module 1')p3 = re.compile(r'\w{3} \w{3} \d\d, \d{4} (\d\d:\d\d:\d\d.\d{3}),DS ,(\d+?\s*?),Door opened')w_file = r'D:\sample.txt'lines = file.readlines()t_file =open(w_file,'w')info = ['User','Time1','Time2','Time3' ]t_file.write('{}\n'.format(','.join(item for item in info)))for line in lines:    p1_line = re.findall(p1, line.strip())    p2_line = re.findall(p2, line.strip())    p3_line = re.findall(p3, line.strip())    if p1_line and p2_line and p3_line:        if p1_line[0][1][:3] == p2_line[0][1][:3] and p1_line[0][1][:3] == p5_line[0][1][:3]:            t_file.write('{},{},{},{}\n'.format(p1_line[0][1].strip(),p1_line[0][0],p2_line[0][0],p3_line[0][0])t_file.close()当我打开 sample.txt 文件时,只有 'User,Time1,Time2,Time3' 行。任何人都可以在我的脚本中找到问题吗?我想要的如下:User,Time1,Time2,Time3201202,14:18:41.945,14:18:51.486,14:19:07.747203204205206,14:20:08.231,14:20:08.231,14:20:10.282
查看完整描述

1 回答

?
达令说

TA贡献1821条经验 获得超6个赞

您的脚本的问题是您试图将所有正则表达式匹配到同一行,然后执行一个和条件,这当然会失败。


每个正则表达式都有效,但仅适用于特定行,因此 3 个中的 2 个将返回[]其计算结果为False.


例如,给定:


 line = 'Thu Jul 18, 2019 14:18:41.945,EFM,201202      ,Robot picked'

你将会有:


p1_line = [('14:18:41.945', '201202      ')]  # match

p2_line = []                                  # no match

p3_line = []                                  # no match

一旦你and有了这三个值,条件将评估为False,因此不会将任何内容写入文件:


if p1_line and p2_line and p3_line:  # this evaluates to False

因此,根据您要实现的确切逻辑,您可能必须存储和记住过去的匹配并以此为基础。


查看完整回答
反对 回复 2022-05-11
  • 1 回答
  • 0 关注
  • 165 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号