python中datetime双循环的意外输出

2024-10-03 09:13:17 发布

您现在位置: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-02-10/01201702100000.txt

2017-02-10/01201702100001.txt

2017-02-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-02-10

2017-02-11

2017-02-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-02-10/01201702100000.txt

2017-02-10/01201702100000.txt

2017-02-10/01201702100000.txt

这会发生1440次,然后日期会前进到

2017-02-11/01201702110000.txt

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

有什么想法吗


Tags: intxtfordatetimedatedef格式range
1条回答
网友
1楼 · 发布于 2024-10-03 09:13:17

我一直在使用date为date函数输入开始日期和结束日期。 为了让文件名循环自己工作,我使用datetime输入日期

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

相关问题 更多 >