如何验证字符串格式日期是否属于文件名指定的日期区间?
问题描述
Windows系统文件名无法使用冒号(:),因此用pp替代。when目录下存在两种格式的文件:
- 单一日期格式:例如
2023-02-05 00pp00 am.txt - 日期区间格式:通过
_--_分隔起始与结束日期,例如2022_-_12_-_29 12pp33 am _--_ 2023_-_01_-_25 19pp13 pm.txt
给定输入日期字符串input_to_search_in_folder = "2022_-_01_-_05 12:33 am",需要验证该日期是否匹配单一日期文件,或落在某个区间文件的日期范围内;匹配成功则读取并打印对应文件内容。
解决方案
以下是完整实现代码:
import os from datetime import datetime # 定义统一的日期格式化规则 DATE_FORMAT = "%Y-%m-%d %I:%M %p" # 处理输入日期,转换为可比较的datetime对象 input_date_str = "2022_-_01_-_05 12:33 am" processed_input = input_date_str.replace("_-_", "-") target_date = datetime.strptime(processed_input, DATE_FORMAT) # 遍历目录查找匹配文件 found = False for filename in os.listdir("when"): # 仅处理txt文件 if not filename.endswith(".txt"): continue # 还原文件名中的日期格式,去除后缀 processed_name = filename.replace("_-_", "-").replace("pp", ":").rstrip(".txt") # 判断文件是单一日期还是区间日期类型 if "_--_" in processed_name: # 拆分起始、结束日期并转换为datetime对象 start_str, end_str = processed_name.split("_--_") start_date = datetime.strptime(start_str.strip(), DATE_FORMAT) end_date = datetime.strptime(end_str.strip(), DATE_FORMAT) # 检查目标日期是否在区间内(包含边界) if start_date <= target_date <= end_date: with open(os.path.join("when", filename), "r", encoding="utf-8") as f: content = f.read() print(repr(content)) found = True break else: # 匹配单一日期文件 file_date = datetime.strptime(processed_name, DATE_FORMAT) if file_date == target_date: with open(os.path.join("when", filename), "r", encoding="utf-8") as f: content = f.read() print(repr(content)) found = True break if not found: print("未找到匹配的文件")
核心逻辑说明
- 日期标准化:通过统一的
DATE_FORMAT,将所有日期字符串转换为datetime对象,确保日期比较的准确性。 - 输入预处理:把输入中的
_-_替换为-,转换成标准日期格式后解析为可操作的datetime实例。 - 文件类型判断:通过文件名中是否包含
_--_区分单一日期和区间日期文件,分别处理匹配逻辑。 - 安全文件读取:使用
with语句自动管理文件句柄,避免资源泄漏问题。
内容的提问来源于stack exchange,提问作者Matt095
相关产品推荐
相关产品推荐

