如何在Python列表中识别不同格式的日期并输出对应索引
解决日志列表中日期项的识别问题
你的原始代码只通过判断[]来识别日期,逻辑既不准确(']' and '[' in elem的写法等价于只判断'[' in elem,因为非空字符串的布尔值为True),也只能覆盖带方括号的日志格式,自然没法识别其他日期样式。
要覆盖所有给定的日期格式,最可靠的方式是用正则表达式匹配常见的日志日期模式,具体实现如下:
代码实现
import re data = ["[2022-08-15 17:42:32,436: INFO/MainProces] lorqw q addadasdasdasdad", "2022-10-24T13:29:50.579Z dasdadasdasdadadadadaddada", "asdadadad adasdas3453 454234 fsdf53", "Mon, 24 Oct 2022 13:29:48 GMT express:router expressInit : /health", 'time="2022-10-24T13:29:12Z" level=error msg="checking config status failed: sdadasd"', "2022/10/24 13:29:15 [error] 234 ssdfsd 435345"] # 定义匹配多种日期格式的正则表达式 date_pattern = re.compile( r'(?:' r'\[\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3}\]|' # 格式1: [YYYY-MM-DD HH:MM:SS,mmm] r'\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z|' # 格式2: YYYY-MM-DDTHH:MM:SS.sssZ r'\w{3}, \d{2} \w{3} \d{4} \d{2}:\d{2}:\d{2} GMT|' # 格式3: Mon, DD MMM YYYY HH:MM:SS GMT r'time="\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z"|' # 格式4: time="YYYY-MM-DDTHH:MM:SSZ" r'\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}' # 格式5: YYYY/MM/DD HH:MM:SS r')' ) for index, elem in enumerate(data): if date_pattern.search(elem): print(f'Date found at index: {index}')
输出结果
Date found at index: 0 Date found at index: 1 Date found at index: 3 Date found at index: 4 Date found at index: 5
说明
- 正则表达式通过
|分隔不同的日期模式,精准覆盖了你提供的所有日志日期格式 re.compile预编译正则可以提升匹配效率,适合处理批量日志数据- 如果后续出现新的日期格式,只需在正则表达式中添加对应的模式即可
内容的提问来源于stack exchange,提问作者Saad Hasan
相关产品推荐
相关产品推荐

