You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 02:18:15