批量重命名目录图片文件时出现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
相关产品推荐
相关产品推荐

