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

如何基于文件名时间戳筛选指定时分区间内的文件

解决方案:实现多分钟区间的文件筛选

核心思路

放弃仅依赖glob的模式匹配(它仅适合固定单模式场景),改为先获取所有符合格式的文件,再通过时间戳筛选的方式,灵活处理连续分钟区间甚至跨午夜的情况。

具体实现代码

import glob
import re

def get_files_between(starttime, endtime):
    # 用正则匹配文件名中的HHMMSS时间戳部分(格式:_6位数字.)
    timestamp_pattern = re.compile(r'_(\d{6})\.')
    # 获取当前目录下所有文件
    all_files = glob.glob("*.*")
    matched_files = []
    
    for file in all_files:
        # 提取文件名中的时间戳片段
        match_result = timestamp_pattern.search(file)
        if not match_result:
            continue  # 跳过不符合命名格式的文件
        
        timestamp = match_result.group(1)
        file_hhmm = timestamp[:4]  # 截取时分部分(HHMM)
        
        # 判断时分是否在目标区间内
        if starttime <= endtime:
            # 常规区间(比如0801到0805)
            if starttime <= file_hhmm <= endtime:
                matched_files.append(file)
        else:
            # 跨午夜区间(比如2359到0002)
            if file_hhmm >= starttime or file_hhmm <= endtime:
                matched_files.append(file)
    
    return matched_files

关键细节说明

  1. 时间戳提取:用正则表达式_(\d{6})\.精准匹配文件名中的_HHMMSS.片段,避免因文件名含多个下划线导致的分割错误。
  2. 区间判断逻辑:
    • 当starttime <= endtime时,直接判断文件的时分字符串是否处于两者之间(字符串按字典序比较,与数字顺序一致)。
    • 当starttime > endtime时(跨午夜场景),只要文件时分大于等于starttime,或小于等于endtime,都属于目标区间。
  3. 兼容性:无需预先知道区间内的所有分钟值,不管是连续10分钟还是跨小时的区间,逻辑都能统一处理。

对比原glob单分钟方案的优势

原方案用glob.glob("*_0801*.txt")匹配单分钟文件,扩展到多分钟时需要生成多个glob模式(如0801到0805要写5个模式),代码繁琐且无法处理跨午夜场景;而筛选式方案仅需一次遍历,逻辑简洁且覆盖所有边界情况。

内容的提问来源于stack exchange,提问作者Oblomov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:05:25