下面是我的输入日期值:
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']
我需要循环浏览列表中的所有值,并在相应的日期值上添加1天。
for date in lst:
< logic needed>
以下是预期输出:(增加一天)
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'
我该怎么做?
-
如果我理解正确,您的第一个问题是如何通过名称检索变量值。我给你看两种方法。
-
数据结构
dict
有两个内在目录记录了当前范围内所有全局/局部变量从名称到值的过程,分别可以通过
globals()
和locals()
获取。因此,globals()['job1_started']
或locals()['job1_started']
将为您提供全局变量job1_started
或局部变量的值。 -
内置功能
eval
eval
计算给定命名空间(默认本地命名空间)中的表达式字符串。因此,eval('job1_started')
相当于locals()['job1_started']
。但是在使用eval
时应该非常小心,因为该字符串可能是一个危险的表达式,例如"__import__('os').system('rm -rf something_important')"
。
-
-
第二个问题是如何在日期字符串中添加1天。您可以使用
datetime
模块来实现这一点。- 使用
strptime
将字符串转换为datetime.datetime
对象,使用strftime
进行反向转换 - 使用
datetime.timedelta
更新日期
- 使用
示例
import datetime
job1_started = '2020-01-01'
job1_end = '2021-01-01'
jobs = ["job1"]
for job in jobs:
for suffix in ('_started', '_end'):
var_name = job + suffix
date_str = locals()[var_name]
date = datetime.datetime.strptime(date_str, "%Y-%m-%d") # 2020-01-01 00:00:00
date_delta = datetime.timedelta(days=1)
date = date + date_delta # 2020-01-02 00:00:00
date_str = datetime.datetime.strftime(date, "%Y-%m-%d") # '2020-01-02'
# update the variable at the local scope
locals()[var_name] = date_str
print(f'{var_name} = {date_str}')