如何在Python循环中为对应作业日期变量增加1天?
问题描述
现有以下日期变量:
job1_started = '2020-01-01' job1_end = '2021-01-01' job2_started = '2022-01-01' job2_end = '2023-01-01' ... jobn_started = '2023-01-01' jobn_end = '2023-01-01'
以及输入列表:
lst=['job1','job2',...... 'jobn']
需要遍历该列表中的所有值,为每个作业对应的_started和_end日期变量增加1天,循环框架如下:
for date in lst: < logic needed>
预期输出(日期加1天):
job1_started = '2020-01-02' job1_end = '2021-01-02' job2_started = '2022-01-02' job2_end = '2023-01-02' ... jobn_started = '2023-01-02' jobn_end = '2023-01-02'
请问该如何实现?
实现方案
1. 准备日期处理工具
用Python的datetime模块处理日期加减,先导入相关类:
from datetime import datetime, timedelta
2. 定义日期加1天的通用函数
把字符串格式的日期转成可计算的datetime对象,加1天后再转回字符串:
def add_one_day(date_str): date_obj = datetime.strptime(date_str, '%Y-%m-%d') new_date_obj = date_obj + timedelta(days=1) return new_date_obj.strftime('%Y-%m-%d')
方式一:直接修改全局变量(适合简单场景)
如果作业日期是全局变量,可以通过globals()字典动态访问和修改:
from datetime import datetime, timedelta def add_one_day(date_str): date_obj = datetime.strptime(date_str, '%Y-%m-%d') return (date_obj + timedelta(days=1)).strftime('%Y-%m-%d') # 初始化作业日期变量 job1_started = '2020-01-01' job1_end = '2021-01-01' job2_started = '2022-01-01' job2_end = '2023-01-01' lst=['job1','job2'] for job in lst: # 修改_started变量 started_key = f"{job}_started" globals()[started_key] = add_one_day(globals()[started_key]) # 修改_end变量 end_key = f"{job}_end" globals()[end_key] = add_one_day(globals()[end_key]) # 验证结果 print(job1_started) # 输出 '2020-01-02' print(job1_end) # 输出 '2021-01-02'
方式二:用字典统一管理(更规范的做法)
不建议用大量零散变量,用字典集中管理所有作业日期,维护更方便:
from datetime import datetime, timedelta def add_one_day(date_str): date_obj = datetime.strptime(date_str, '%Y-%m-%d') return (date_obj + timedelta(days=1)).strftime('%Y-%m-%d') # 用字典存储所有作业日期 jobs_dates = { 'job1': {'started': '2020-01-01', 'end': '2021-01-01'}, 'job2': {'started': '2022-01-01', 'end': '2023-01-01'}, # 可继续添加更多作业 } lst=['job1','job2'] for job in lst: jobs_dates[job]['started'] = add_one_day(jobs_dates[job]['started']) jobs_dates[job]['end'] = add_one_day(jobs_dates[job]['end']) # 验证结果 print(jobs_dates['job1']['started']) # 输出 '2020-01-02'
内容的提问来源于stack exchange,提问作者Raghu
相关产品推荐
相关产品推荐

