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

Python批量重命名子目录文件遇FileNotFoundError问题求助

错误原因分析
  • 遍历目录路径错误:代码中files = os.listdir()未传入子目录路径,默认读取脚本运行的当前工作目录文件,而非目标子目录pathy下的文件,导致拼接出的OurFilePath指向不存在的文件,触发FileNotFoundError。
  • 未过滤非目录条目:os.listdir(directory)会返回目标目录下的所有文件和子目录,若f是文件而非子目录,后续拼接的pathy是文件路径,遍历操作会直接报错。
  • 重命名冲突未处理:子目录下多个同扩展名文件会被重命名为完全相同的名称,导致文件被覆盖,原代码未考虑这种情况。
  • 路径转义隐患:直接使用带反斜杠的字符串路径,可能因转义字符引发路径解析异常。
修正后的代码
import os

# 使用原始字符串避免转义问题,也可改用os.path.join适配多系统
directory = r"steamapps\workshop\content\573090"

# 遍历目标目录下的所有条目
for entry in os.listdir(directory):
    entry_path = os.path.join(directory, entry)
    # 只处理子目录,跳过文件
    if not os.path.isdir(entry_path):
        continue
    
    # 遍历子目录下的所有文件
    for idx, filename in enumerate(os.listdir(entry_path)):
        file_path = os.path.join(entry_path, filename)
        # 跳过子目录,仅处理文件
        if os.path.isdir(file_path):
            continue
        
        # 分离文件扩展名
        _, file_ext = os.path.splitext(filename)
        # 子目录名+序号作为新文件名,避免重名冲突
        new_filename = f"{os.path.basename(entry_path)}_{idx}{file_ext}"
        new_file_path = os.path.join(entry_path, new_filename)
        
        # 执行重命名操作
        os.rename(file_path, new_file_path)
关键修正点说明
  • 明确指定os.listdir(entry_path)遍历子目录下的文件,确保路径指向正确。
  • 用os.path.isdir()过滤非目录条目,避免对文件执行目录操作。
  • 添加序号idx到新文件名中,解决同目录下同扩展名文件的重命名冲突。
  • 使用原始字符串r""定义路径,避免反斜杠转义问题;也可全程用os.path.join动态拼接路径,适配Windows/Linux等不同操作系统。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 04:45:31