Python实现JPG文件名自动递增序号避免覆盖问题求助
解决OCR单张处理时文件名递增前缀问题
问题背景
每次单独运行OCR处理单张图片时,若图片对应型号名称(text变量为型号名)相同,新生成的图片会覆盖旧文件。需要给文件名添加01、02、03这类自动递增的两位序号前缀,但现有代码因每次运行时计数器mn都会重置为0,无法实现序号递增。
现有问题代码
mn = 0 File = open("modelImg/model.txt",'a') print("result = {}".format(text)) File.write("result = {}\n".format(text)) File.close() src = "../images/" + filename mn += 1 dst = ("modelImg/"+"%i. "%mn+text +".jpg") shutil.copy(src,dst) return text
解决方案
核心思路是每次运行时统计同型号已存在的文件数量,以此生成递增序号,同时格式化序号为两位数字(如01而非1)。修改后的代码如下:
import glob # 导入glob模块用于匹配文件 import shutil # 统计当前型号已存在的文件数量 existing_files = glob.glob(f"modelImg/*. {text}.jpg") # 新序号为已存在文件数+1,格式化两位数字(01、02...) mn = len(existing_files) + 1 formatted_mn = f"{mn:02d}" # 写入记录文件(用with语句自动管理文件关闭) with open("modelImg/model.txt", 'a') as file: print(f"result = {text}") file.write(f"result = {text}\n") # 复制文件到目标路径 src = f"../images/{filename}" dst = f"modelImg/{formatted_mn}. {text}.jpg" shutil.copy(src, dst) return text
代码说明
- 同型号文件统计:通过
glob.glob(f"modelImg/*. {text}.jpg")匹配所有对应型号的已生成文件,获取当前型号的文件总数。 - 两位序号格式化:用
len(existing_files) + 1得到新序号,再通过f"{mn:02d}"格式化为两位数字,确保序号呈现01、02的规范格式。 - 文件操作优化:改用
with语句自动关闭文件,避免手动关闭可能引发的异常。
替代方案(全局统一递增序号)
如果需要全局统一编号(不管型号是否相同,序号依次递增),可以用单独的计数器文件持久化记录序号:
import shutil # 读取计数器文件,不存在则初始化为1 counter_path = "modelImg/counter.txt" try: with open(counter_path, 'r') as f: mn = int(f.read().strip()) + 1 except FileNotFoundError: mn = 1 # 格式化两位序号 formatted_mn = f"{mn:02d}" # 写入记录文件 with open("modelImg/model.txt", 'a') as file: print(f"result = {text}") file.write(f"result = {text}\n") # 复制文件 src = f"../images/{filename}" dst = f"modelImg/{formatted_mn}. {text}.jpg" shutil.copy(src, dst) # 更新计数器文件 with open(counter_path, 'w') as f: f.write(str(mn)) return text
说明
- 每次运行时读取
counter.txt中的现有序号,加1后作为新序号,再写回文件实现持久化。 - 适合需要全局连续编号的场景,所有处理后的图片按顺序递增编号。
内容的提问来源于stack exchange,提问作者AsKrs
相关产品推荐
相关产品推荐

