如何筛选文件夹中名称包含有效YYYYMMDDHHMMSS格式日期的文件列表
筛选含有效YYYYMMDDHHMMSS日期的文件
没问题,我来帮你搞定这个文件筛选的需求!要从文件夹里挑出那些文件名包含**有效14位日期格式(YYYYMMDDHHMMSS)**的文件,核心思路就是提取日期字符串并验证它的合法性,下面是具体的实现方案:
实现思路
- 遍历目标文件夹中的所有文件名
- 从每个文件名中提取疑似日期的14位数字串
- 尝试将该字符串解析为合法的日期时间,能成功解析的即为有效日期
- 收集所有符合条件的文件名
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_20200101235900、file_2_20200101235900、file_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




