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

如何在Python中重命名指定目录下的最新下载文件?

解决下载目录最新文件重命名问题

你的代码思路没问题,但有两个关键问题需要修正,同时补充异常处理能让脚本更健壮:

原代码的问题

  1. os.rename(latest_file, "sf-admin-term") 只写目标文件名的话,文件会被移动到当前Python脚本的运行目录,而不是在下载目录内完成重命名
  2. 没有处理下载目录为空、文件被占用、权限不足等异常场景

修正后的代码

import glob
import os

# 获取当前用户的下载目录
download_path = f'C:\\Users\\{os.getlogin()}\\Downloads'
# 获取目录下所有条目(包含文件夹,可按需过滤)
list_of_files = glob.glob(f"{download_path}\\*")

if not list_of_files:
    print("下载目录为空,没有可处理的文件")
else:
    # 按创建时间筛选最新文件(Windows是创建时间,Unix是元数据修改时间)
    latest_file: str = max(list_of_files, key=os.path.getctime)
    print(f"定位到最新文件: {latest_file}")
    
    # 保留原文件扩展名,构造下载目录内的目标路径
    file_extension = os.path.splitext(latest_file)[1]
    target_file_path = os.path.join(download_path, f"sf-admin-term{file_extension}")
    
    try:
        os.rename(latest_file, target_file_path)
        print(f"重命名完成,新文件路径: {target_file_path}")
    except PermissionError:
        print("权限不够,没法重命名这个文件")
    except FileExistsError:
        print(f"下载目录里已经有叫 {os.path.basename(target_file_path)} 的文件了")
    except Exception as err:
        print(f"重命名失败,错误信息: {str(err)}")

额外优化建议

  • 如果只想处理文件(跳过文件夹),可以在获取文件列表时加过滤:
    list_of_files = [f for f in glob.glob(f"{download_path}\\*") if os.path.isfile(f)]
    
  • 要是想按文件修改时间而非创建时间找最新文件,把os.path.getctime换成os.path.getmtime
  • 如果有多个文件时间戳完全相同,max会随机返回一个,可根据文件名等其他维度二次排序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:50:20