Python给文件添加时间戳重命名时遇Win3/Win123错误求助
解决os.rename()加时间戳时的Win3/Win123错误
我来帮你搞定这个问题!你遇到的Win3或Win123错误,大概率是踩了Windows文件名规则的坑——默认生成的时间戳里可能包含了Windows禁用的特殊字符,比如冒号(:),这是最常见的诱因。
核心问题分析
Windows系统的文件名不允许包含以下字符:/:*?"<>|,而如果直接用datetime的默认格式(比如%H:%M:%S)生成时间戳,其中的冒号就会触发Win123错误(文件名/目录名语法不正确);Win3错误则可能是目标路径不存在,或者文件被占用导致的。
具体解决步骤
1. 生成合法的时间戳字符串
把时间戳里的冒号替换成下划线、连字符这类合法字符,比如:
# 替换冒号为下划线,生成符合Windows规则的时间戳 timestamp = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
这样生成的时间戳格式是2024-05-20_14-30-00,完全适配Windows文件名要求。
2. 结合你的代码修改重命名逻辑
假设你要给指定文件添加时间戳重命名,参考以下适配你现有代码结构的片段:
#!/usr/bin/python import datetime import os import shutil import json import re maindir = "F:/Protocols/" os.chdir(maindir) maindir = os.getcwd() print("Working Directory : "+maindir) # 示例:以all_iteration.txt为例进行重命名 old_file = "all_iteration.txt" # 拆分文件名和后缀,避免破坏文件格式 file_base, file_ext = os.path.splitext(old_file) # 生成合法时间戳 timestamp = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S") # 拼接新文件名 new_file = f"{file_base}_{timestamp}{file_ext}" try: os.rename(old_file, new_file) print(f"重命名成功:{old_file} -> {new_file}") except Exception as e: print(f"重命名失败:{str(e)}")
3. 排查其他可能的错误原因
- Win3错误(路径不存在):如果要重命名到其他子目录,先确保目录存在,可提前创建:
target_dir = os.path.join(maindir, "renamed_files") os.makedirs(target_dir, exist_ok=True) new_file = os.path.join(target_dir, f"{file_base}_{timestamp}{file_ext}") - 文件被占用:检查文件是否被其他程序(比如记事本、Excel)打开,关闭后再尝试重命名。
内容的提问来源于stack exchange,提问作者suraj das
相关产品推荐
相关产品推荐

