如何编写脚本实现文件重命名追加时间戳并在文件末尾添加MD5校验值
文件重命名+追加MD5页脚脚本实现
以下是可直接运行的Python实现,完全匹配需求逻辑:
运行前务必备份目标目录文件,避免误操作造成数据损失。
核心实现逻辑
- 文件名处理:针对示例中
abc123.txt类的文件,自动提取前缀abc作为基础名,拼接YYYYMMDDHHMMSS格式的时间戳,保留原文件后缀生成新文件名 - MD5处理:先计算原始文件内容的MD5值(避免追加内容后MD5校验值和实际写入值不匹配),再在文件末尾追加固定格式的页脚写入校验值
- 自动跳过子目录、脚本本身,避免误处理
完整脚本代码
import os import hashlib from datetime import datetime def calc_md5(content: bytes) -> str: """计算字节内容的MD5值""" md5_obj = hashlib.md5() md5_obj.update(content) return md5_obj.hexdigest() if __name__ == "__main__": # 配置项:可根据自身需求修改 target_dir = "./" # 要处理的文件所在目录,默认当前脚本运行目录 timestamp = datetime.now().strftime("%Y%m%d%H%M%S") # 时间戳格式 footer_template = "\n---\n文件MD5校验值:{}\n" # 页脚模板 for filename in os.listdir(target_dir): file_path = os.path.join(target_dir, filename) # 跳过子目录和当前脚本本身 if os.path.isdir(file_path) or filename == os.path.basename(__file__): continue # 拆分文件名和后缀 name_part, ext_part = os.path.splitext(filename) # 提取基础名:示例规则为取开头的字母部分(abc123取abc),可自行修改规则 base_name = "" for char in name_part: if char.isalpha(): base_name += char else: break # 如果没提取到有效基础名,直接用原文件名前缀 if not base_name: base_name = name_part # 读取原始文件内容 with open(file_path, "rb") as f: original_content = f.read() # 计算原始内容MD5,拼接页脚 file_md5 = calc_md5(original_content) new_content = original_content + footer_template.format(file_md5).encode("utf-8") # 生成新文件名 new_filename = f"{base_name}_{timestamp}{ext_part}" new_file_path = os.path.join(target_dir, new_filename) # 写入新内容后重命名(同目录下os.replace会直接覆盖同名文件,谨慎操作) with open(file_path, "wb") as f: f.write(new_content) os.replace(file_path, new_file_path) print(f"处理完成:{filename} → {new_filename},MD5:{file_md5}")
使用说明
- 先将脚本放到要处理的文件所在目录,或者修改
target_dir参数为目标目录的绝对路径 - 如果你的基础名提取规则和示例不一致(比如不需要去掉文件名里的数字、要固定用某个基础名),直接修改
base_name部分的生成逻辑即可 - 时间戳格式、页脚显示内容都可以通过配置项自定义调整
- 同目录下如果已经存在同名的带时间戳文件,脚本会直接覆盖,建议处理前确认目录内无重复命名的文件
内容的提问来源于stack exchange,提问作者vicky20
相关产品推荐
相关产品推荐

