繁体   English   中英

python中datetime双循环的意外输出

[英]Unexpected output from datetime double loop in python

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

文件名循环本身可以正常工作:

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

有任何想法吗?

我一直在使用date输入date函数的开始日期和结束日期。 为了使文件名循环独立运行,我使用datetime输入日期。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM