Python:基于文件名批量归类移动图片文件
按文件名特征批量归类移动图片的解决方案
嘿,我明白你现在的需求——已经能单独移动或者全移,但还没搞定按同类文件名特征分组移动对吧?比如把所有带_01后缀的图片都塞进folder 1,这个其实用Python写个小脚本就能轻松解决,而且灵活可调,适配不同的文件名规则。
下面我给你一步步拆解实现方法:
核心思路
我们要做的就是:
- 遍历源文件夹里的所有图片
- 从每个文件名里提取出分类特征(比如你例子里的
_01部分) - 根据特征创建对应的目标文件夹(如果不存在的话)
- 把图片移动到匹配的文件夹里
具体实现代码
假设你的图片都存在./source_images文件夹里,我们用Python的标准库os和shutil来完成操作:
import os import shutil # 配置路径:替换成你的源文件夹路径 source_dir = "./source_images" # 目标根文件夹:所有分类文件夹会建在这里 target_root = "./classified_images" # 确保目标根文件夹存在 os.makedirs(target_root, exist_ok=True) # 遍历源文件夹里的所有文件 for filename in os.listdir(source_dir): # 只处理图片文件(可以根据需要添加其他格式,比如.png、.jpeg) if filename.lower().endswith((".jpg", ".jpeg")): # 提取分类特征:这里按你的例子,取下划线后面的部分(比如"1600_01.jpg" -> "01") # 分割文件名和扩展名 name_part, ext_part = os.path.splitext(filename) # 按下划线分割,取最后一段作为特征 feature = name_part.split("_")[-1] # 生成目标文件夹名:比如"01" -> "folder 1" folder_num = int(feature) # 把"01"转成数字1 target_folder = os.path.join(target_root, f"folder {folder_num}") # 确保目标文件夹存在 os.makedirs(target_folder, exist_ok=True) # 拼接源文件路径和目标文件路径 source_path = os.path.join(source_dir, filename) target_path = os.path.join(target_folder, filename) # 移动文件 shutil.move(source_path, target_path) print(f"已移动:{filename} -> {target_folder}")
灵活调整规则
如果你的文件名特征不是下划线后面的数字,比如:
- 要按文件名开头的前4位分组(比如
1600_xx.jpg都进folder 1600):把提取特征的代码改成feature = name_part.split("_")[0] - 要按其他分隔符(比如
-)分组:把split("_")改成split("-") - 特征是其他固定字符串:直接判断文件名是否包含某个关键词,比如
if "_01" in filename,然后对应到指定文件夹
注意事项
- 运行脚本前最好先备份图片,避免误操作
- 如果你的图片有重名,
shutil.move会覆盖目标文件夹里的同名文件,要是担心这个,可以加个判断:如果目标路径已存在,就给文件名加个后缀(比如1600_01_副本.jpg) - 路径要写对,Windows系统的路径用
\\或者原始字符串(比如r"C:\source_images")
这样就能完美实现你要的同类特征文件名归类啦!
内容的提问来源于stack exchange,提问作者ZenB883
相关产品推荐
相关产品推荐

