如何用Python实现复制现有文件并按递增1批量生成指定数量副本?
解决模板文件批量递增复制的问题
原代码的问题点
- 没必要遍历目录下所有文件,我们只需要针对目标模板文件操作
- 内层循环的
i +=1是错误操作,range(0,10)会自动生成0到9的序列,你这样修改会让i最后固定为10,根本没法生成连续递增的文件名 - 缺少核心的文件复制步骤,没调用
shutil.copy()完成实际的文件复制
基础版:指定模板文件批量复制
如果你已经明确知道模板文件是0.json,要复制N次生成1.json到N.json,用下面的代码:
import os import shutil # 替换成你的目标文件路径 os.chdir('[INSERT PATH]') # 定义模板文件和要复制的次数 template_file = "0.json" copy_times = 9 # 生成1-9.json,共9个新文件 # 拆分文件名和后缀 base_name, file_ext = os.path.splitext(template_file) # 循环生成新文件 for i in range(1, copy_times + 1): new_file = f"{i}{file_ext}" # 核心:复制模板文件到新文件 shutil.copy(template_file, new_file) print(f"已生成: {new_file}")
扩展版:自动识别最大编号的模板文件
如果想自动找到目录里编号最大的json文件作为模板,接着往下生成新文件,用这个版本:
import os import shutil os.chdir('[INSERT PATH]') # 找出所有数字命名的json文件 json_files = [] for file in os.listdir(): if file.endswith('.json'): name_part, _ = os.path.splitext(file) if name_part.isdigit(): json_files.append(file) if not json_files: print("没找到数字命名的json模板文件") else: # 找到编号最大的文件 json_files.sort(key=lambda x: int(os.path.splitext(x)[0])) latest_template = json_files[-1] max_num = int(os.path.splitext(latest_template)[0]) copy_times = 5 # 要复制的次数 file_ext = os.path.splitext(latest_template)[1] # 从max_num+1开始生成新文件 for i in range(max_num + 1, max_num + 1 + copy_times): new_file = f"{i}{file_ext}" shutil.copy(latest_template, new_file) print(f"已生成: {new_file}")
关键知识点
os.path.splitext():用来拆分文件名和后缀,比如把0.json拆成0和.jsonshutil.copy():完成文件复制的核心方法,第一个参数是源文件,第二个是目标文件名range(start, end):生成从start到end-1的整数序列,比如range(1,10)会生成1-9的数字,刚好对应要生成的文件名编号
内容的提问来源于stack exchange,提问作者cimply
相关产品推荐
相关产品推荐

