Excel + Python 批量图片重命名教程:基于颜色名自动编码

102次阅读
没有评论

🧪 输出示例

原始文件名 新文件名
XY1234567 黑色.jpg XY1234567-01.jpg
XY1234567 藏青.jpg XY1234567-03.jpg
XY1234567 米白.jpg XY1234567-02.jpg

终端输出:

✅ 重命名: XY1234567 黑色.jpg -> XY1234567-01.jpg
✅ 重命名: XY1234567 藏青.jpg -> XY1234567-03.jpg
✅ 重命名: XY1234567 米白.jpg -> XY1234567-02.jpg

 


🤖 Assistant

从文件名的 第十位字符到文件名的最后 进行精准匹配,并找到颜色名称,而不是简单的包含字符匹配。

修改后的逻辑:

我们可以做如下调整:

  1. 从文件名的第十位开始,到文件名的最后,提取出一个子字符串。
  2. 直接将这个子字符串与颜色名称进行精确匹配。

方案:

我们修改代码,使其从第十位到文件名的末尾提取出一个 子字符串 ,然后与颜色名称进行 精准匹配

修改后的代码(精确匹配颜色):

import os
import pandas as pd

# 读取颜色编码表
excel_path = r'C:UsersAdministratorDesktop25 冬单品图片 col.xlsx'  # Excel 文件路径
df = pd.read_excel(excel_path)
df.columns = df.columns.str.strip()  # 去除列名空格
color_to_code = dict(zip(df['B'], df['A']))  # 中文名 -> 编码

# 图片目录
img_dir = r'C:UsersAdministratorDesktop25 冬单品图片 photo1'  # 图片文件夹路径

for filename in os.listdir(img_dir):
    if filename.lower().endswith(('.jpg', '.jpeg', '.png', '.JPG')):

        # 去除文件名中的空格
        name, ext = os.path.splitext(filename)
        name = name.replace(" ", "")  # 去除空格

        # 提取从第十位开始到文件名末尾的子字符串
        if len(name) >= 10:
            color_substring = name[9:]  # 获取从第十位到最后的子字符串
        else:
            print(f"⚠ 文件名长度不足 10 位,无法提取颜色:{filename}")
            continue

        # 根据子字符串查找颜色
        color_name = None
        for cname in color_to_code.keys():
            if color_substring == cname:  # 精准匹配颜色名称
                color_name = cname
                model = name[:9]  # 前九位作为款号
                break

        if not color_name:
            print(f"⚠ 未识别颜色名:{filename}(提取的子字符串:{color_substring})")
            continue

        # 获取颜色编码
        color_code = color_to_code.get(color_name)
        if not color_code:
            print(f"⚠ 颜色编码未找到:{color_name}(文件:{filename})")
            continue

        # 新文件名格式:款号 - 颜色编码. 扩展名
        new_filename = f"{model}-{color_code}{ext.lower()}"
        src = os.path.join(img_dir, filename)
        dst = os.path.join(img_dir, new_filename)

        # 防止文件名冲突,自动添加后缀
        original_dst = dst
        counter = 1
        while os.path.exists(dst):
            new_filename = f"{model}-{color_code}_{counter}{ext.lower()}"
            dst = os.path.join(img_dir, new_filename)
            counter += 1

        # 执行重命名
        os.rename(src, dst)
        print(f"✅ 重命名: {filename} -> {new_filename}")

 

主要改动:

  1. 提取子字符串:从第十位字符开始,提取文件名的剩余部分,即 color_substring = name[9:]
    • 这部分子字符串将作为颜色名称进行精确匹配。
  2. 精准匹配颜色名称 :在颜色字典 color_to_code 中进行 完全匹配,而不是包含匹配。如果找到完全匹配的颜色名称,就将其作为颜色。
    if color_substring == cname:

     

  3. 处理文件名冲突:如果目标文件名已存在,继续添加编号直到找到不冲突的文件名。

示例:

假设有一个文件名 2541121M1- 灰蓝条纹.jpg,脚本会从第十位 M 开始提取子字符串 灰蓝条纹 ,然后与 color_to_code 中的颜色名称进行 完全匹配 。如果找到匹配的颜色 灰蓝条纹,则获取该颜色的编码,并重命名文件。

结果:

  1. 这个修改后的脚本将从文件名的第十位开始,提取到文件名的最后,精确匹配 颜色名称。
  2. 如果颜色名称正确匹配,系统会按新的规则重命名文件,防止文件名冲突。
正文完
 0
评论(没有评论)