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

获取目录最新创建文件时出现异常文件名问题求助

问题描述

我用这段代码获取目录里最新创建的文件:

max_file[0] = [x for x in os.listdir(_dir) if os.path.getctime(os.path.join(_dir, x)) == max([os.path.getctime(os.path.join(_dir, i)) for i in os.listdir(_dir)])]

但偶尔会返回类似path/to/file/0001.png._00_的文件名,实际图片根本没有下划线后缀。有时候代码又能正常运行,我怀疑是不是文件太新,或者Google Drive还没完成上传导致的?

分析与解决方案
  • 临时文件是核心原因:你看到的._00_后缀文件,就是Google Drive在上传/同步过程中生成的临时中间文件。这类文件是同步工具用来确保上传完整性的过渡文件,同步完成后会自动删除,但如果你的代码刚好在同步未结束时扫描目录,就会抓取到这些还没被清理的临时文件。

  • 优化代码逻辑,过滤临时文件:当前代码不仅重复调用目录扫描和时间获取接口效率低,还会把所有同创建时间的文件都纳入结果,包括临时文件。可以改成下面的写法:

import os

def get_latest_valid_file(_dir, target_ext=None):
    # 整理目录下所有文件的完整路径与创建时间
    file_info = []
    for filename in os.listdir(_dir):
        file_path = os.path.join(_dir, filename)
        if os.path.isfile(file_path):  # 只处理文件,排除目录
            ctime = os.path.getctime(file_path)
            file_info.append((ctime, file_path))
    
    if not file_info:
        return None
    
    # 按创建时间倒序排序
    file_info.sort(reverse=True, key=lambda x: x[0])
    
    # 过滤临时文件与目标格式
    for ctime, path in file_info:
        filename = os.path.basename(path)
        # 排除带同步临时后缀的文件
        if '._00_' in filename or '.tmp' in filename:
            continue
        # 如果指定了目标扩展名,只保留对应格式
        if target_ext and not filename.endswith(target_ext):
            continue
        return path
    return None

# 使用示例:获取最新的png文件
max_file[0] = get_latest_valid_file(_dir, target_ext='.png')
  • 额外实用建议:
    • 如果是监控Google Drive同步目录,可以在扫描前添加短暂延迟,比如time.sleep(3),给同步过程留足完成时间;
    • 也可以结合文件的修改时间os.path.getmtime判断,临时文件的修改时间通常会持续更新,而完成上传的文件时间会稳定下来。

内容的提问来源于stack exchange,提问作者Fabian1327

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 10:48:16