You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取目录最旧文件失败:代码返回最新文件,求问题排查

问题分析与修复

你的代码现在有两个核心问题,导致无法正确获取目标目录下的最旧/最新文件:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:18:36