如何用Python筛选SQLoader日志目录中最新时间戳的日志文件
保留SQLoader最新日志文件的Python实现
实现思路
从文件名自带的YYYYMMDDHHMMSS格式时间戳判断文件新旧,筛选出时间戳最大的最新文件保留,删除其余同格式的日志文件。
具体步骤
- 导入
os(文件系统操作)和re(正则匹配)模块 - 指定日志文件所在的目录路径
- 用正则匹配符合
[前缀].SQL.[进程号].[时间戳].log格式的文件,提取时间戳部分 - 收集所有符合格式的文件及其时间戳,找出时间戳最大的最新文件
- 遍历所有目标文件,删除除最新文件外的其他文件
完整代码示例
import os import re def keep_latest_sql_loader_log(log_dir): # 正则匹配日志格式,捕获14位时间戳部分 log_pattern = re.compile(r'^.*\.SQL\.\d+\.(\d{14})\.log$') valid_logs = {} # 遍历目录下所有文件 for filename in os.listdir(log_dir): file_path = os.path.join(log_dir, filename) if not os.path.isfile(file_path): continue match_result = log_pattern.match(filename) if match_result: timestamp = match_result.group(1) valid_logs[timestamp] = filename if not valid_logs: print("未找到符合格式的SQLoader日志文件") return # 筛选最新文件 latest_timestamp = max(valid_logs.keys()) latest_file = valid_logs[latest_timestamp] print(f"将保留最新日志文件:{latest_file}") # 删除旧文件 for timestamp, filename in valid_logs.items(): if timestamp != latest_timestamp: delete_path = os.path.join(log_dir, filename) try: os.remove(delete_path) print(f"已删除旧日志:{filename}") except Exception as e: print(f"删除{filename}失败:{str(e)}") # 替换为你的实际日志目录 target_log_dir = "/your/log/directory/path" keep_latest_sql_loader_log(target_log_dir)
代码说明
- 正则表达式精准匹配SQLoader生成的日志格式,避免误处理其他文件
- 直接从文件名提取时间戳,比依赖文件修改时间更可靠(防止修改时间被篡改)
- 加入异常处理,避免因权限不足、文件被占用等问题导致程序崩溃
内容的提问来源于stack exchange,提问作者PK39565
相关产品推荐
相关产品推荐

