Python如何根据输入日期读取指定Excel并匹配前1工作日的规则命名Excel
实现方案
依赖导入
import pandas as pd from datetime import datetime, timedelta import glob import os
核心实现逻辑
- 保留你原有的用户输入接收、日期字符串拼接逻辑
- 计算输入日期的前1个工作日,自动跳过周六周日
- 用通配符拼接文件匹配规则,模糊匹配符合命名要求的第二个Excel文件
- 读取匹配到的文件
完整可运行代码示例
# 1. 接收用户输入,拼接目标日期字符串(原有逻辑可直接复用) year = input("请输入年份:") month = input("请输入月份:") day = input("请输入日期:") # 补全月、日的前导零,拼接为YYYYMMDD格式 input_date_str = f"{year}{month.zfill(2)}{day.zfill(2)}" input_date = datetime.strptime(input_date_str, "%Y%m%d") # 2. 计算前1个工作日 # 方案1:直接用pandas内置方法自动跳过周末,代码更简洁 prev_workday = pd.bdate_range(end=input_date, periods=2)[0] prev_workday_str = prev_workday.strftime("%Y%m%d") # 方案2:不想依赖pandas的工作日能力可以用手写判断逻辑,效果一致 ''' delta = 1 while True: temp_date = input_date - timedelta(days=delta) # weekday返回值0=周一、4=周五、5=周六、6=周日 if temp_date.weekday() < 5: prev_workday_str = temp_date.strftime("%Y%m%d") break delta += 1 ''' # 3. 模糊匹配符合规则的第二个Excel文件 # *是通配符,可匹配下划线后的任意数字/字符后缀 match_pattern = os.path.join(r'K:\Test', f'Test_Value_Serie_After_{prev_workday_str}_*') match_files = glob.glob(match_pattern) # 匹配失败抛出异常,可根据需求调整错误处理逻辑 if not match_files: raise FileNotFoundError(f"未找到符合规则的文件,匹配规则为:{match_pattern}") # 取第一个匹配到的文件,若存在多个匹配结果可自行调整选择规则 second_file_path = match_files[0] # 4. 读取第二个Excel文件 df_second = pd.read_excel(second_file_path)
注意事项
- 若需要额外排除法定节假日,可引入
chinese_calendar等第三方库扩展工作日判断逻辑 - 同路径下存在多个匹配文件时,可根据修改时间、文件名后缀数字大小等规则调整文件选择逻辑
- 路径字符串前加
r是为了避免转义字符解析错误,确保路径读取正常
内容的提问来源于stack exchange,提问作者Bianconera
相关产品推荐
相关产品推荐

