如何从不含周末及节假日的CSV日期列表中获取最近日期?
从CSV中获取最接近当前日期的有效日期
实现思路
- 读取CSV文件中的日期列
- 将字符串格式的日期转换为可计算的日期对象
- 计算每个日期与当前日期的差值绝对值
- 筛选出差值最小的日期(可选处理差值相同的情况)
代码示例(Python)
假设你的CSV文件包含名为date的日期列,格式为YYYY-MM-DD:
import csv from datetime import datetime def find_closest_date(csv_file_path, date_col="date"): today = datetime.now().date() closest = None smallest_gap = None with open(csv_file_path, 'r', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: date_str = row[date_col].strip() # 根据你的CSV日期格式调整这里的格式字符串 try: date = datetime.strptime(date_str, "%Y-%m-%d").date() except ValueError: print(f"跳过无效日期格式: {date_str}") continue gap = abs((date - today).days) # 更新最接近的日期 if smallest_gap is None or gap < smallest_gap: smallest_gap = gap closest = date # 可选:当两个日期差值相同时,优先选择未来的日期 elif gap == smallest_gap: if date > today: closest = date return closest # 调用示例 if __name__ == "__main__": result = find_closest_date("your_dates.csv") if result: print(f"最接近当前日期的有效日期: {result.strftime('%Y-%m-%d')}") else: print("未找到有效日期")
关键说明
- CSV无列名的情况:如果你的CSV没有表头,改用
csv.reader,读取时取row[0]作为日期字符串 - 日期格式适配:如果CSV中的日期是
MM/DD/YYYY或其他格式,修改strptime的格式参数(比如"%m/%d/%Y") - 时区处理:如果需要考虑时区,使用
zoneinfo(Python 3.9+)或pytz库,将当前日期转换为对应时区的日期 - 差值相同的处理:代码中默认优先选择未来日期,若需要优先过去日期,将
date > today改为date < today即可
内容的提问来源于stack exchange,提问作者Whity
相关产品推荐
相关产品推荐

