如何基于CSV中的字符串值实现分类递增文件重命名?
按分类递增计数重命名文件的解决方案
这问题很典型——你需要给每个动物类别单独维护计数器,而不是用一个全局的计数变量。咱们直接改代码来实现需求:
修改后的完整代码
import os import csv # 用字典存储每个类别的当前计数,自动适配新类别 category_counts = {} with open('rename.csv') as f: lines = csv.reader(f) for line in lines: original_path = line[0] category = line[1] # 首次遇到该类别时,初始化计数为0 if category not in category_counts: category_counts[category] = 0 # 对应类别计数+1 category_counts[category] += 1 # 生成带分类序号的新文件名 new_filename = f"{category}{category_counts[category]}.jpg" # 执行重命名操作 os.rename(original_path, new_filename)
关键改动说明
- 替换全局计数为分类字典:用
category_counts字典替代原来的count变量,每个动物类别对应一个独立的计数器,比如category_counts['cat']专门记录cat类的序号。 - 动态初始化类别:如果CSV里新增了其他类别(比如rabbit),代码会自动为它创建计数器,不用手动修改代码。
- 字符串格式化生成新名:用f-string拼接类别名和当前计数,简洁直接生成
cat1、dog2这类格式的文件名。
可选优化(如果确定只有指定类别)
如果你确认CSV里只会有cat、dog、mouse、hamster这四个类别,可以提前初始化字典,省掉判断步骤:
category_counts = {'cat': 0, 'dog': 0, 'mouse': 0, 'hamster': 0}
注意事项
- 确保
line[0]是正确的文件路径(相对路径或绝对路径),否则os.rename会找不到文件报错。 - 如果目标目录里已经存在重名文件(比如之前手动创建过cat1.jpg),重命名会失败,建议先清理目标目录或添加重名判断逻辑。
内容的提问来源于stack exchange,提问作者Quadracola
相关产品推荐
相关产品推荐

