You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

代码说明

  1. 同型号文件统计:通过glob.glob(f"modelImg/*. {text}.jpg")匹配所有对应型号的已生成文件,获取当前型号的文件总数。
  2. 两位序号格式化:用len(existing_files) + 1得到新序号,再通过f"{mn:02d}"格式化为两位数字,确保序号呈现01、02的规范格式。
  3. 文件操作优化:改用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 21:35:20