Python提取字符串日期 结合for循环if语句实现单元格范围筛选
实现步骤说明
你不需要全量遍历所有单元格范围再做判断,整体逻辑拆成3步即可,先修正你现有代码的2个基础问题:
- 定义的
weeks列表缺少闭合方括号] - 不要用
range作为变量名,这是Python内置关键字,会引发命名冲突
1. 解析日期字符串提取关键信息
不需要引入第三方日期库,直接通过字符串拆分就能拿到需要的星期、日期号数信息:
date_of_report = "Wednesday, May 25, 2022" # 按逗号拆分日期字符串 weekday_full, month_day, year = [seg.strip() for seg in date_of_report.split(",")] # 提取星期缩写(和预定义days列表的key对齐,Wednesday取前3位即为Wed) target_weekday = weekday_full[:3] # 提取当月日期号数 month_name, day_num = month_day.split() day_num = int(day_num)
2. 计算日期所属周次
你预定义的单元格范围每7天对应一个周块:1-7号为Week1、8-14号为Week2、15-21号为Week3、22号及之后为Week4,直接用整除计算即可:
# 补全你之前没写完的weeks列表 weeks = ["Week 1", "Week 2", "Week 3", "Week 4"] # 计算周次索引,和weeks列表下标对齐 week_idx = (day_num - 1) // 7 target_week = weeks[week_idx]
以你给出的2022年5月25日为例:(25-1)//7 = 3,对应Week 4,星期匹配Wed,对应的目标单元格范围就是G57:G73。
3. 单元格匹配与赋值
高效写法(推荐)
不需要遍历所有周、所有星期的单元格范围,直接从映射表取目标范围操作即可,避免无意义的循环:
# 直接定位到目标单元格范围 target_cell_range = days_of_the_month_cells[target_week][target_weekday] # 遍历范围写值 for row_idx, row in enumerate(ws[target_cell_range]): for cell in row: if row_idx == 0: cell.value = target_weekday # 其余行可按业务需求填充对应日期值
兼容原有遍历逻辑的写法
如果你要保留原来的四层遍历结构,if判断直接匹配当前遍历到的周次、星期是否和目标值一致即可:
for week_name, day_mapping in days_of_the_month_cells.items(): for day_name, cell_range in day_mapping.items(): for row_idx, row in enumerate(ws[cell_range]): for cell in row: if row_idx == 0: # 周次、星期同时匹配时才赋值 if week_name == target_week and day_name == target_weekday: cell.value = day_name
你预定义的
months月份天数映射,仅在需要处理跨月日期、闰年2月天数计算的场景下才需要用到,当前单日期匹配周次的逻辑不需要调用。
内容的提问来源于stack exchange,提问作者littlejiver
相关产品推荐
相关产品推荐

