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

批量重命名目录图片文件时出现OSError: [Errno 2]错误求助

解决图片重命名时的OSError: No such file or directory问题

先来看你遇到的问题和使用的代码:

我尝试重命名指定目录下的所有图片文件,但遇到错误:OSError: [Errno 2] No such file or directory。使用的代码如下:

import os
path ='/Users/kunalmalhotra/Desktop/HotdogNotHotdog/hotdog/'
for filename in os.listdir(path):
    if filename.endswith(".jpg"):
        for filename in os.listdir(path):
            for i in range(0,100):
                os.rename(filename, "hotdog"+str(i)+".jpg")

问题根源拆解

咱们一步步看代码里的问题:

  • 文件路径不完整:os.listdir(path)返回的只是单纯的文件名(比如abc.jpg),不是完整路径。当你调用os.rename(filename, ...)时,Python会在当前工作目录查找这个文件,而不是你指定的path目录,自然会提示找不到文件。
  • 嵌套遍历逻辑混乱:你嵌套了两层for filename in os.listdir(path),这会导致重复遍历文件,而且第一次遍历修改文件名后,第二次遍历的文件列表已经变化,很容易触发异常。
  • 重复命名会覆盖文件:内层的for i in range(0,100)会让每个文件被重命名100次,最后所有文件都会变成hotdog99.jpg,之前的文件会被直接覆盖。

修正后的代码

这里给你调整后的代码,完美解决这些问题:

import os

path = '/Users/kunalmalhotra/Desktop/HotdogNotHotdog/hotdog/'
# 先筛选出目录下所有jpg文件的完整路径(加lower()兼容大小写不同的jpg文件)
target_files = [os.path.join(path, filename) for filename in os.listdir(path) 
                if filename.lower().endswith(".jpg")]

# 遍历每个文件,用索引生成唯一的新文件名
for index, old_path in enumerate(target_files):
    # 构造新文件的完整路径
    new_filename = f"hotdog{index}.jpg"
    new_path = os.path.join(path, new_filename)
    os.rename(old_path, new_path)

代码细节说明

  • 完整路径拼接:用os.path.join(path, filename)把目录和文件名拼接成完整路径,确保os.rename能精准找到目标文件。
  • 提前筛选目标文件:一次性把所有jpg文件筛选出来,避免嵌套遍历的混乱逻辑。
  • 唯一索引命名:用enumerate生成从0开始的唯一索引,每个文件对应一个不重复的新名字,不会出现覆盖问题。如果想从1开始编号,只需要把f"hotdog{index}.jpg"改成f"hotdog{index+1}.jpg"就行。

内容的提问来源于stack exchange,提问作者Kunal Malhotra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:43:25