获取目录最新创建文件时出现异常文件名问题求助
问题描述
我用这段代码获取目录里最新创建的文件:
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判断,临时文件的修改时间通常会持续更新,而完成上传的文件时间会稳定下来。
- 如果是监控Google Drive同步目录,可以在扫描前添加短暂延迟,比如
内容的提问来源于stack exchange,提问作者Fabian1327
相关产品推荐
相关产品推荐

