You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何筛选文件夹中名称包含有效YYYYMMDDHHMMSS格式日期的文件列表

筛选含有效YYYYMMDDHHMMSS日期的文件

没问题,我来帮你搞定这个文件筛选的需求!要从文件夹里挑出那些文件名包含**有效14位日期格式(YYYYMMDDHHMMSS)**的文件,核心思路就是提取日期字符串并验证它的合法性,下面是具体的实现方案:

实现思路

  1. 遍历目标文件夹中的所有文件名
  2. 从每个文件名中提取疑似日期的14位数字串
  3. 尝试将该字符串解析为合法的日期时间,能成功解析的即为有效日期
  4. 收集所有符合条件的文件名

Python 代码实现

方案一:针对固定命名格式(日期为下划线分隔的最后一段)

如果你的文件名都是类似file_x_YYYYMMDDHHMMSS这种固定格式,直接按下划线分割取最后一段验证即可:

import os
from datetime import datetime

def filter_valid_date_files(folder_path):
    valid_file_list = []
    for filename in os.listdir(folder_path):
        # 分割文件名,提取最后一段疑似日期的部分
        name_parts = filename.split('_')
        if len(name_parts) < 3:
            continue  # 跳过不符合命名格式的文件
        date_candidate = name_parts[-1]
        # 验证日期格式与有效性
        try:
            # 严格按照YYYYMMDDHHMMSS格式解析
            datetime.strptime(date_candidate, '%Y%m%d%H%M%S')
            valid_file_list.append(filename)
        except ValueError:
            # 解析失败,说明日期无效,跳过该文件
            continue
    return valid_file_list

# 替换成你的文件夹路径
target_folder = "/your/folder/path"
result_list = filter_valid_date_files(target_folder)
print(f"list = {result_list}")

方案二:更灵活的正则匹配(日期可在文件名任意位置)

如果日期可能出现在文件名的任意位置,用正则表达式匹配所有14位数字串,再逐一验证:

import os
import re
from datetime import datetime

def filter_valid_date_files(folder_path):
    valid_file_list = []
    # 匹配14位连续数字的正则表达式
    date_regex = re.compile(r'\d{14}')
    for filename in os.listdir(folder_path):
        # 提取所有疑似日期的14位数字串
        date_candidates = date_regex.findall(filename)
        for candidate in date_candidates:
            try:
                datetime.strptime(candidate, '%Y%m%d%H%M%S')
                valid_file_list.append(filename)
                break  # 只要有一个有效日期就加入列表,避免重复添加
            except ValueError:
                continue
    return valid_file_list

# 调用示例
target_folder = "/your/folder/path"
result_list = filter_valid_date_files(target_folder)
print(f"list = {result_list}")

效果说明

针对你给出的示例文件:

  • file_1_20200101235900file_2_20200101235900file_3_20200101235900的日期20200101235900是合法的(2020年1月1日23点59分00秒),会被保留
  • file_4_20200109999999的日期部分20200109999999包含无效的小时(99)和分钟(99),解析时会抛出ValueError,因此会被排除

最终输出的列表就是你预期的:list = ['file_1_20200101235900', 'file_2_20200101235900', 'file_3_20200101235900']

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

火山引擎 最新活动