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

Python如何获取目录文件列表按时间倒序,同时规避断链的FileNotFoundError

解决失效符号链接下的文件按修改时间排序问题

你的代码存在两个核心问题:

  1. 使用max()只会返回单个最新文件,无法实现所有文件按逆时间顺序列出的需求;
  2. os.path.getmtime()会跟随符号链接访问目标文件,失效链接会直接触发FileNotFoundError,而max()在遍历计算key时一旦遇到异常就会终止执行。

下面提供两种针对性的解决方案:

方案1:跳过失效符号链接,按目标文件时间排序

自定义一个安全获取修改时间的函数,捕获失效链接的异常,将这类文件标记后过滤掉,再对有效文件排序:

import glob
import os

def safe_get_target_mtime(path):
    try:
        # 获取符号链接指向文件的修改时间(若为普通文件则直接获取自身时间)
        return os.path.getmtime(path)
    except FileNotFoundError:
        # 失效链接返回极小值,后续可过滤
        return float('-inf')

# 按修改时间逆序排序所有匹配文件
all_files = sorted(glob.iglob("*release*.log"), key=safe_get_target_mtime, reverse=True)
# 过滤掉失效的符号链接
valid_files = [file for file in all_files if safe_get_target_mtime(file) != float('-inf')]

for file_name in valid_files:
    print(f"filename = {file_name}")

方案2:获取符号链接自身的修改时间(无需依赖目标文件)

如果你的需求是按符号链接本身的创建/修改时间排序,而非目标文件的时间,可使用os.lstat()(不跟随符号链接),这样即使链接失效也不会报错:

import glob
import os

def get_link_self_mtime(path):
    # 获取符号链接自身的修改时间,不受目标文件状态影响
    return os.lstat(path).st_mtime

# 按链接自身修改时间逆序排序所有匹配文件
sorted_files = sorted(glob.iglob("*release*.log"), key=get_link_self_mtime, reverse=True)

for file_name in sorted_files:
    print(f"filename = {file_name}")

补充说明

原代码中max()的使用场景是获取单个最大值,若要批量排序必须用sorted();同时异常处理需要包裹在key函数内部,才能在遍历每个文件时单独处理异常,避免程序终止。

内容的提问来源于stack exchange,提问作者A.G.Progm.Enthusiast

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 10:35:32