python中datetime double循环的意外输出

时间:2017-10-27 11:04:42

标签: python loops date datetime nested-loops

我有一组以yyyy-mm-dd格式命名为日期的目录。里面是1440个文件,一天中每分钟一个,格式为NNyyyymmddHHMM.txt。我想写一个循环来逐个检查这些文件的内容。要做到这一点,我正在制作一个日期循环工作正常。当我尝试将日期传递给第二个循环以生成文件名时,我在日期的午夜获得1440个文件名。单独执行第二个循环并给它一个日期可以正常工作。因此,当第一个循环的日期传递给第二个循环时会出现问题。

Filename循环本身正常工作:

from datetime import timedelta, datetime

def filerange(date):
    for i in range (0,1440):
        yield date + timedelta(minutes=i)

date = datetime(2017, 2, 10)

for file in filerange(date):
    print ((date.strftime("%Y-%m-%d")) + "/01" + file.strftime("%Y%m%d%H%M" + ".txt"))

输出:

  

2017年2月10日/ 01201702100000.txt

     

2017年2月10日/ 01201702100001.txt

     

2017年2月10日/ 01201702100002.txt

     

...

日期循环本身正常工作:

from datetime import timedelta, date, datetime

def daterange(start_date, end_date):
    for n in range(int ((end_date - start_date).days)):
        yield start_date + timedelta(n)

start_date = date(2017, 2, 10)
end_date = date(2017, 2, 13)

for date in daterange(start_date, end_date):
    print (date)

输出:

  

2017年2月10日

     

2017年2月11日

     

2017年2月12日

但是当我合并两个循环时,会发生错误:

from datetime import timedelta, date, datetime

def daterange(start_date, end_date):
    for n in range(int ((end_date - start_date).days)):
        yield start_date + timedelta(n)

def filerange(date):
    for i in range (0,1440):
        yield date + timedelta(minutes=i)

start_date = date(2017, 2, 10)
end_date = date(2017, 2, 13)

for date in daterange(start_date, end_date):
    for file in filerange(date):
        print ((date.strftime("%Y-%m-%d")) + "/01" + file.strftime("%Y%m%d%H%M" + ".txt"))

输出:

  

2017年2月10日/ 01201702100000.txt

     

2017年2月10日/ 01201702100000.txt

     

2017年2月10日/ 01201702100000.txt

这发生了1440次,然后日期进展到

  

2017年2月11日/ 01201702110000.txt

在我看来timedelta正确地添加了分钟但是因为格式是每日%Y%m%d它不保留分钟信息所以当我告诉它以分钟和秒的格式显示时,它是00 :00

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我一直在使用date输入日期函数的开始日期和结束日期。 为了让文件名循环能够自行处理,我使用datetime输入日期。

使用datetime在双循环中输入日期范围。