获取目录最旧文件失败:代码返回最新文件,求问题排查
问题分析与修复
你的代码现在有两个核心问题,导致无法正确获取目标目录下的最旧/最新文件:
1. 完全忽略了文件,只遍历目录的修改时间
你当前的代码只调用os.path.getmtime(root)获取遍历到的目录的修改时间,完全没处理os.walk返回的files列表里的文件——而你要找的是整个目录下的文件的最旧/最新时间,这是最关键的遗漏。
2. 时间初始化与更新逻辑错误
get_oldest函数里,你把oldest_time = time.time()放在了for循环内部,每次循环都会把最旧时间重置为当前时间,最后只能保留最后一次循环中符合条件的目录时间,根本没法记录遍历过程中真正最旧的时间。正确做法是把初始化放在循环外,设一个足够大的初始值,再在循环里不断更新更小的时间。get_youngest函数里,if current_it > 0的判断毫无意义(文件/目录的修改时间都是正数),而且每次循环都会覆盖output的值,最后得到的只是最后一个遍历到的目录的修改时间,不是真正的最新时间。
修复后的代码
import os import time from datetime import datetime # 获取目录下最旧文件的日期 def get_oldest(value): oldest_time = time.time() # 初始化为当前时间,确保第一个文件/目录时间会更小 for root, dirs, files in os.walk(value): # 遍历当前目录下的所有文件 for file in files: file_path = os.path.join(root, file) file_mtime = os.path.getmtime(file_path) if file_mtime < oldest_time: oldest_time = file_mtime # 可选:如果需要把目录的修改时间也纳入比较,取消下面注释 # dir_mtime = os.path.getmtime(root) # if dir_mtime < oldest_time: # oldest_time = dir_mtime return datetime.utcfromtimestamp(oldest_time).strftime('%Y-%m-%d') # 获取目录下最新文件的日期 def get_youngest(value): youngest_time = 0 # 初始化为0,确保第一个文件/目录时间会更大 for root, dirs, files in os.walk(value): # 遍历当前目录下的所有文件 for file in files: file_path = os.path.join(root, file) file_mtime = os.path.getmtime(file_path) if file_mtime > youngest_time: youngest_time = file_mtime # 可选:如果需要把目录的修改时间也纳入比较,取消下面注释 # dir_mtime = os.path.getmtime(root) # if dir_mtime > youngest_time: # youngest_time = dir_mtime return datetime.utcfromtimestamp(youngest_time).strftime('%Y-%m-%d')
补充说明
- 代码默认只统计文件的修改时间,如果需要同时考虑目录的修改时间,取消对应代码块的注释即可。
- 如果遇到无法访问的文件/目录,
os.path.getmtime会抛出异常,你可以根据实际需求添加try-except块来跳过这类情况。
内容的提问来源于stack exchange,提问作者Stoutishhat90
相关产品推荐
相关产品推荐

