如何在Python中重命名指定目录下的最新下载文件?
解决下载目录最新文件重命名问题
你的代码思路没问题,但有两个关键问题需要修正,同时补充异常处理能让脚本更健壮:
原代码的问题
os.rename(latest_file, "sf-admin-term")只写目标文件名的话,文件会被移动到当前Python脚本的运行目录,而不是在下载目录内完成重命名- 没有处理下载目录为空、文件被占用、权限不足等异常场景
修正后的代码
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
相关产品推荐
相关产品推荐

