Python,日期时间对象

Python,日期时间对象,python,dataframe,datetime,Python,Dataframe,Datetime,我仍在学习如何用Python编写代码,所以如果能找到一个对初学者更友好、效率更高的答案,我将不胜感激。 因此,我编写了一段代码来检索文件的创建日期,并将其附加到一个列表中: path = r'C:\\...' all_files = glob.glob(path + "/*.xlsx") dates = [] for filename in all_files: mod_date = dt.datetime.fromtimestamp(os.path.getctime(filename)

我仍在学习如何用Python编写代码,所以如果能找到一个对初学者更友好、效率更高的答案,我将不胜感激。 因此,我编写了一段代码来检索文件的创建日期,并将其附加到一个列表中:

path = r'C:\\...'
all_files = glob.glob(path + "/*.xlsx")
dates = []
for filename in all_files:
    mod_date = dt.datetime.fromtimestamp(os.path.getctime(filename)).strftime('%m-%d-%Y')
    dates.append(mod_date)
    dates.sort()
dates
输出如下:

['04-24-2020',
 '04-27-2020',
 '04-28-2020',
 '04-29-2020',
 '04-30-2020',
 '05-01-2020',
 '05-04-2020',
 '05-05-2020',
 '05-06-2020',
 '05-07-2020',
 '05-08-2020',
 '05-11-2020',
 '05-12-2020',
 '05-13-2020',
 '05-14-2020',
 '05-15-2020',
 '05-18-2020',
 '05-19-2020',
 '05-20-2020',
 '05-21-2020']
​
我想做一个循环来检测月份的变化,但我希望它能让我而不是只读取月份本身:

mod_date = dt.datetime.fromtimestamp(os.path.getctime(filename)).strftime('%m')
我仍然需要完整日期以便同时运行其他代码。 我希望它看起来像:

for i in range(0, len(dates)):
    if (month != month[i]): <<< something along the lines of this
       print("hello")
范围内的i(0,len(日期)):

if(month!=month[i]):不确定我是否正确理解了您想要的内容,但对于循环,您可以使用以下内容:

for i in range(len(dates) - 1):
    if dates[i][:2] != dates[i + 1][:2]:
        print("ok")

不确定我是否正确理解了您想要的内容,但对于循环,您可以使用以下内容:

for i in range(len(dates) - 1):
    if dates[i][:2] != dates[i + 1][:2]:
        print("ok")

既然您告诉我您想要的是完整的日期,而不仅仅是月份,那么您可以做如下事情:(考虑
date\u list
您为.xlsx文件提供的输出)

def检查月份(日期列表):
对于日期列表中的日期字符串:
#你有日期供以后使用
date=datetime.datetime.strtime(日期字符串,%m-%d-%Y)
尝试:
如果(日期、月份、日期、年份)!=(上一个日期.月,上一个日期.年):
打印(f'在{date}'更改)
除名称错误外:
通过
上一个日期=日期
检查月份(日期列表)
#输出:更改日期为2020-05-01 00:00:00

既然你告诉我你想要的是完整的日期,而不仅仅是月份,你可以做如下事情:(考虑你为.xlsx文件提供的输出)

def检查月份(日期列表):
对于日期列表中的日期字符串:
#你有日期供以后使用
date=datetime.datetime.strtime(日期字符串,%m-%d-%Y)
尝试:
如果(日期、月份、日期、年份)!=(上一个日期.月,上一个日期.年):
打印(f'在{date}'更改)
除名称错误外:
通过
上一个日期=日期
检查月份(日期列表)
#输出:更改日期为2020-05-01 00:00:00

另一种方法是使用该功能,如果您需要每月进行一些设置或清理,这一方法尤其有用

(正如其他人所建议的,在准备输出数据之前,不要执行
.strftime(“%m-%d-%Y”)
。)


另一种方法是使用该函数,如果您每个月都需要进行一些设置或清理,这一方法尤其有用

(正如其他人所建议的,在准备输出数据之前,不要执行
.strftime(“%m-%d-%Y”)
。)



为什么要将日期时间转换为字符串?你可以比较我的约会[i].month>我的约会[i-1].month,但以后仍然可以使用整个datetime对象执行任何操作?我同意Paul的观点,你应该保留日期对象,而不是将它们转换为字符串。嗯,我没有将日期时间转换为字符串。我相信输出就是这样的。我现在明白你的意思了。我看代码的时间不够长。啊,我明白了。很抱歉,我第一次不明白。我想知道日期实际上是什么,而不是一堆数字作为输出,这就是为什么我把它变成“MM-DD-YYYY”为什么要把日期时间转换成字符串?你可以比较我的约会[i].month>我的约会[i-1].month,但以后仍然可以使用整个datetime对象执行任何操作?我同意Paul的观点,你应该保留日期对象,而不是将它们转换为字符串。嗯,我没有将日期时间转换为字符串。我相信输出就是这样的。我现在明白你的意思了。我看代码的时间不够长。啊,我明白了。很抱歉,我第一次不明白。我想看看日期实际上是什么,而不是一堆数字作为输出,这就是为什么我把它做成“MM-DD-YYYY”,我想这会给我一个索引器,因为if语句向前看,不能在最后一个循环中迭代。但我想我可以让它看看上一次迭代。谢谢你的提示!直到Len-1它才开始迭代。为了完整性,您还应该检查年份是否发生了变化,否则不会检测到从一年的一月到下一年的一月的跳跃。我认为这会给我一个索引器,因为if语句向前看,不能在最后一个循环中迭代。但我想我可以让它看看上一次迭代。谢谢你的提示!它在Len-1之前不会重复。为了完整性,您还应该检查年份是否发生了变化,否则不会检测到从一年的一月到下一年的一月的跳转。嗯,它第一次正确运行,但是如果我重新运行它,而不将“日期列表”更改为日期。我明白了:在2020-04-24 00:00:00时改变,在2020-05-01 00:00:00时改变,这是有道理的。对不起,我对这一切还是新手。没问题,我们都去过。这是因为定义到for循环中的变量被放在for循环所在的父作用域的命名空间中。为了完整性,您还应该检查年份是否已更改,否则不会检测到从一年的一月到下一年的一月的跳转。@sabik说得对!我没有想到这一点。更新答案来考虑这个可能性。嗯,它第一次正确运行,但是如果我重新运行它而不改变任何除了“DeaEyLIST”的日期。我明白了:在2020-04-24 00:00:00时改变,在2020-05-01 00:00:00时改变,这是有道理的。对不起,我对这一切还是新手。没问题,我们都去过。这是因为定义到for循环中的变量被放在for循环所在的父作用域的命名空间中。为了完整性,您还应该检查年份是否发生了变化,否则从一年的一月跳到下一年的一月就赢了