Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对于特定时间间隔内的循环_Python_Pandas_For Loop - Fatal编程技术网

Python 对于特定时间间隔内的循环

Python 对于特定时间间隔内的循环,python,pandas,for-loop,Python,Pandas,For Loop,我有一些循环的问题。我有两个列表,一个是电子邮件内容,一个是日期 my_emails=['my email 1', 'my email 2', 'my email 3'] sent_date=['10/30/2020', '10/29/2020', '10/30/2020'] 我正在尝试运行for循环,以便执行以下操作: 根据我的_电子邮件中的每封电子邮件,我都有发送日期的信息;因此,我的电子邮件1于2020年10月30日发送我的电子邮件2于2020年10月29日发送,我的电子邮件3于202

我有一些循环的问题。我有两个列表,一个是电子邮件内容,一个是日期

my_emails=['my email 1', 'my email 2', 'my email 3']
sent_date=['10/30/2020', '10/29/2020', '10/30/2020']
我正在尝试运行for循环,以便执行以下操作:

  • 根据我的_电子邮件中的每封电子邮件,我都有发送日期的信息;因此,
    我的电子邮件1
    于2020年10月30日发送<代码>我的电子邮件2于2020年10月29日发送,
    我的电子邮件3
    于2020年10月30日发送。 每对夫妇的电子邮件/日期,我将需要寻找的电子邮件发送日期前3天和后3天。 例如:
我的电子邮件1
是在
10/30/2020
上发送的,然后我需要在接下来的三天(即2020年10月31日、2020年11月1日和2020年11月02日)运行一些东西,在之前的三天(即2020年10月29日、2020年10月28日和2020年10月27日)运行一些广告

我试着这样做:

from datetime import datetime, timedelta

for i in my_emails: 
    print(i)
    for t in sent_date:
        t = datetime.strptime(t, '%m/%d/%Y')
        start_date =  t - timedelta(1) # it moves only one day before that date, but actually I should also consider the days after, as in the example
        day = datetime.strftime(start_date, '%m/%d/%Y')
        # do some stuff
代码不返回预期的日期范围。 您能告诉我如何在上面的列表中包含每个电子邮件的日期信息,以及如何在日期范围内运行一些代码吗

谢谢

我的预期产出是:

  • 我的电子邮件1:从2020年10月27日到2020年2月11日运行一些代码
  • 我的电子邮件2:从2020年10月26日到2020年11月1日运行一些代码
  • 我的电子邮件3:从2020年10月27日到2020年2月11日运行一些代码

由于日期可能会发生变化,我不能考虑它们的唯一范围,但是考虑列表中的相应日期作为起始点,计算日期之前3天和3天之后。< /P> < P>尝试这种方法。< /P>

from datetime import datetime, timedelta
date_range = 3
for m,t in zip(my_emails, sent_date):
    t = datetime.strptime(t, '%m/%d/%Y')
    before_dates = [ t - timedelata(i) for i in range(1,date_range+1)]
    after_dates = [ t  + timedelata(i) for i in range(1,date_range+1)]
    #do stuff with mail(m) and dates

三天前是
t-timedelta(days=3)
,三天后是
t+timedelta(days=3)
。嗨,约翰,你说得对。我复制了我正在更新的代码(因为它不工作,我只测试了一天),非常感谢Rajith。关于您的代码有一个问题:由于我需要在同一天内提取电子邮件,在我选择的范围内的接下来几天和之前几天,我应该如何编辑您的代码?在我的例子中,我设置了一个条件,将t的
放入sent\u date:start\u date=t end\u date=t
,即相同的日期,然后我应该移动到下一天/前一天。另一种方法是首先计算每一个日期需要考虑的范围,从最近的日期开始,再追溯到时间。