Python 3.7实现文件重命名自动追加递增序号不删除历史版本方案咨询
Python3.7 文件自动递增备份实现方案
核心实现逻辑
- 先拆分目标文件的目录、文件名、后缀三个部分,生成初始备份文件名
- 从1开始循环递增计数,生成带括号序号的备份名,直到找到当前目录下不存在的可用文件名
- 仅执行重命名操作,全程无文件删除逻辑,不影响目录内其他无关文件
- 封装为通用函数,支持传入不同路径的文件直接调用,满足多文件备份需求
完整实现代码
import os def get_available_backup_path(original_file_path, backup_prefix="OLD"): """ 生成可用的备份文件路径,自动追加递增序号 :param original_file_path: 要备份的原文件完整路径 :param backup_prefix: 备份文件名的前缀,默认是OLD :return: 可用的备份文件完整路径 """ # 拆分原文件的目录、文件名、后缀 dir_name = os.path.dirname(original_file_path) base_name = os.path.basename(original_file_path) file_name, ext = os.path.splitext(base_name) # 生成初始备份文件名 backup_base = f"{backup_prefix}{file_name}" candidate_path = os.path.join(dir_name, f"{backup_base}{ext}") counter = 1 # 循环查找未被占用的文件名 while os.path.exists(candidate_path): candidate_path = os.path.join(dir_name, f"{backup_base}({counter}){ext}") counter += 1 return candidate_path def backup_file(original_file_path, backup_prefix="OLD"): """ 执行文件备份操作,重命名为带递增序号的备份文件 :param original_file_path: 要备份的原文件完整路径 :param backup_prefix: 备份文件名的前缀,默认是OLD """ if not os.path.exists(original_file_path): print(f"Error: 原文件不存在:{original_file_path}") return backup_path = get_available_backup_path(original_file_path, backup_prefix) try: os.rename(original_file_path, backup_path) print(f"备份成功:{original_file_path} -> {backup_path}") except OSError as e: print(f"Error: 备份失败 {original_file_path} : {e.strerror}") # 调用示例,处理两个不同路径的文件 if __name__ == "__main__": # 第一个要备份的文件 backup_file(r"path/to/file/queues.sqlite") # 第二个要备份的文件,路径不同直接传对应路径即可 backup_file(r"another/path/other_file.db")
方案说明
- 完全兼容Python3.7版本,仅使用标准库
os模块,无需安装第三方依赖 - 只会匹配当前要备份的文件对应的备份命名格式,不会修改、删除目录下的其他文件
- 序号是基于当前已存在的备份文件自动递增,不会出现覆盖历史备份的情况
- 同分区下
os.rename是原子操作,不会出现文件损坏的问题
内容的提问来源于stack exchange,提问作者TLBones
相关产品推荐
相关产品推荐

