如何在Python中根据指定列表批量重命名文件夹中的图片?
批量重命名图片:用自定义列表替换序号命名
看起来你已经找对了方向——用os.rename()来完成重命名,只是在读取名字列表的环节有点混淆,我帮你梳理清楚两种常见的场景,直接上可运行的代码:
场景1:名字列表已经在代码中定义好
如果你的x = ["hello", "rat", ...]已经直接写在Python代码里,那直接按顺序对应图片序号即可,注意列表长度必须和图片数量一致(1000个元素):
import os # 替换成你的图片文件夹实际路径,比如 "C:/Users/You/Pictures/MyImages" image_dir = "/path/to/your/image/folder" # 你的名字列表,确保有1000个元素 x = ["hello", "rat", ...] # 省略剩余998个元素 # 先做个安全检查:列表长度是否匹配 if len(x) != 1000: raise ValueError("名字列表必须包含1000个元素,和图片数量一致!") # 遍历所有图片,按序号对应重命名 for img_num in range(1, 1001): # 构建原文件路径和新文件路径 old_path = os.path.join(image_dir, f"{img_num}.jpg") new_path = os.path.join(image_dir, f"{x[img_num-1]}.jpg") # 先确认原文件存在,避免报错 if os.path.exists(old_path): os.rename(old_path, new_path) print(f"已完成:{old_path} → {new_path}") else: print(f"跳过:文件不存在 {old_path}")
场景2:名字列表存放在文本文件中
如果你是把名字存在一个文本文件里(比如names.txt),之前的代码错误在于用open(x)——这里的x应该是文件路径字符串,而不是列表变量。根据你提到的split(',\n'),假设你的文本文件里是用逗号+换行分隔名字,那读取方式可以调整为:
import os image_dir = "/path/to/your/image/folder" name_file = "/path/to/your/names.txt" # 替换成你的文本文件路径 # 读取并处理名字列表 with open(name_file, 'r', encoding='utf-8') as f: # 按逗号+换行分割,同时去除多余的空格和空元素 x = [name.strip() for name in f.read().split(',\n') if name.strip()] # 同样先检查长度 if len(x) != 1000: raise ValueError(f"读取到{len(x)}个名字,需要1000个!") # 重命名逻辑和场景1完全一致 for img_num in range(1, 1001): old_path = os.path.join(image_dir, f"{img_num}.jpg") new_path = os.path.join(image_dir, f"{x[img_num-1]}.jpg") if os.path.exists(old_path): os.rename(old_path, new_path) print(f"已完成:{old_path} → {new_path}") else: print(f"跳过:文件不存在 {old_path}")
重要提醒
- 先备份! 重命名前一定要把图片文件夹复制一份备份,避免代码出错导致文件丢失或覆盖。
- 检查重复名字:如果列表
x里有重复的元素,重命名时会覆盖掉之前的文件,建议先检查len(set(x)) == len(x)来确认没有重复。 - 路径问题:如果你的Python脚本不在图片文件夹里,一定要用绝对路径,否则
os.rename()会找不到文件。
内容的提问来源于stack exchange,提问作者Sahil
相关产品推荐
相关产品推荐

