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
相关产品推荐
相关产品推荐

