如何从字符串提取日期并删除早于一周的记录——Kafka主题缺失检测脚本优化需求
处理缺失Kafka主题检测结果:日期标准化+过滤一周前记录
我来帮你搞定这个收尾工作!咱们可以通过几个清晰的步骤来处理这些检测结果,既把日期转成标准格式,又能自动过滤掉早于一周的记录。下面以Python为例(脚本开发用它很顺手),给你详细拆解:
步骤1:准备工作
首先导入处理日期的核心模块,用来做日期解析和时间计算:
from datetime import datetime, timedelta
步骤2:编写处理函数
写一个专门的函数来处理你的结果字符串,逻辑清晰好维护:
def process_missing_topics(results_str): # 把结果按行分割成单独的记录 records = results_str.strip().split('\n') # 计算当前时间往前推一周的日期(作为过滤的阈值) one_week_ago = datetime.now() - timedelta(weeks=1) processed_records = [] for record in records: # 提取每条记录开头的日期部分(比如"2022 Mar 11") date_segment = record[:11].strip() try: # 把英文缩写格式的日期转换成datetime对象 record_date = datetime.strptime(date_segment, '%Y %b %d') except ValueError: # 遇到格式异常的日期,打印提示并跳过这条记录 print(f"警告:无法解析日期 '{date_segment}',已跳过该记录") continue # 只保留一周内的有效记录 if record_date >= one_week_ago: # 把日期转成标准的YYYY-MM-DD格式 standard_date = record_date.strftime('%Y-%m-%d') # 替换原日期,拼接成新的记录 updated_record = f"{standard_date} {record[11:]}" processed_records.append(updated_record) # 把处理后的记录重新拼接成字符串返回 return '\n'.join(processed_records)
步骤3:使用示例
假设你的原始结果字符串存在raw_results变量里,直接调用函数就能得到处理后的结果:
raw_results = """2022 Mar 11 ADR00180 - Is missing the topic for: xx 2022 Jul 17 ADR00195 - Is missing the topic for: xx 2022 Feb 16 ESO00011 - Is missing the topic for: xx 2022 Aug 09 EMF00023 - Is missing the topic for: xx 2022 May 24 ESO00012 - Is missing the topic for: xx 2022 May 22 ESO00013 - Is missing the topic for: xx""" processed_results = process_missing_topics(raw_results) print(processed_results)
(注:你示例里的日期都是2022年的,远早于当前一周,所以运行后会返回空字符串,这是正常的过滤结果~)
关键细节说明
- 日期解析:用
strptime('%Y %b %d')匹配"2022 Mar 11"格式,%b对应英文月份缩写(比如Mar、Jul),兼容各种英文月份缩写的大小写。 - 过滤逻辑:
datetime.now()获取当前时间,减去timedelta(weeks=1)得到一周前的时间点,只保留日期大于等于这个阈值的记录。 - 格式自定义:如果需要其他标准格式,把
strftime('%Y-%m-%d')改成你想要的即可,比如%Y/%m/%d或者%d-%b-%Y。
内容的提问来源于stack exchange,提问作者Niels Beukenkamp
相关产品推荐
相关产品推荐

