如何用Python按文件夹最后文件名的序号续存文件
问题
我的目录中已有以下文件:
COL_1001.png COL_1002.png
下次保存新文件时,希望自动命名为COL_1003.png。我正在使用Python的shutil库,现有一段示例代码,请问如何修改代码实现这个自动递增编号的需求?
现有示例代码:
allfiles = os.listdir(src) c = 1001 for f in allfiles: if f in files and len(selected_prop)>0: s = f s = f.split('.') s[0] = projCode + '_' + selected_prop[0] + '_COL.' + str(c) k = '.'.join(s) shutil.copy( src + '\\' + f, os.path.join(dst,k)) c += 1
解决方案
要实现自动获取下一个递增编号,核心是先从现有文件中提取最大的编号值,再以此为基础生成新文件名。以下是修改后的代码:
import os import shutil # 替换为你的实际路径和变量值 src = "你的源目录路径" dst = "你的目标目录路径" projCode = "你的项目代码" selected_prop = ["目标属性值"] files = [] # 你的目标文件列表,根据实际情况赋值 # 提取现有COL_格式文件的最大编号 max_col_num = 0 for filename in os.listdir(src): # 筛选符合COL_XXX.png格式的文件 if filename.startswith("COL_") and filename.endswith(".png"): try: # 拆分文件名获取数字部分 num_str = filename.split("_")[1].split(".")[0] current_num = int(num_str) if current_num > max_col_num: max_col_num = current_num except (IndexError, ValueError): # 文件名格式不符合则跳过 continue # 确定新文件的起始编号 start_num = max_col_num + 1 if max_col_num != 0 else 1001 # 沿用原代码逻辑处理文件,使用新的起始编号 current_num = start_num for f in allfiles: if f in files and len(selected_prop) > 0: name_parts = f.split('.') # 修正命名格式为下划线连接(和COL_1001格式统一) name_parts[0] = f"{projCode}_{selected_prop[0]}_COL_{current_num}" new_filename = '.'.join(name_parts) # 使用os.path.join拼接路径,避免系统路径分隔符问题 shutil.copy(os.path.join(src, f), os.path.join(dst, new_filename)) current_num += 1
关键说明
- 编号提取逻辑:遍历目录筛选
COL_开头的png文件,拆分文件名提取数字部分,记录最大的编号值。 - 起始编号确定:如果已有COL_文件,新编号为最大编号+1;如果没有,则默认从1001开始。
- 路径拼接优化:用
os.path.join替代手动拼接路径,避免Windows和Linux系统路径分隔符的问题。 - 命名格式修正:原代码中使用
.连接编号(如COL.1001),这里改为下划线_,和你示例的COL_1001.png格式保持一致,若你需要保留原格式,可改回.。
内容的提问来源于stack exchange,提问作者Kartikey Sinha
相关产品推荐
相关产品推荐

