Python shutil创建文件夹时为文件夹名添加日期时间报错问题
问题产生原因
核心原因是Windows系统对文件/文件夹命名有强制字符限制:冒号:属于系统保留的非法命名字符,仅可用于驱动器盘符标识、NTFS备用数据流分隔,绝对不能出现在普通文件/文件夹名称中。
你的时间格式化逻辑用了%I:%M:%S规则,生成的时间串自带冒号,最终拼接出的目标路径为Z:/Backup Files/backup_07_13_2022-12:27:22,末尾的备份文件夹名包含非法冒号,Windows系统无法将其识别为有效路径,因此调用os.makedirs创建目标文件夹时直接抛出FileNotFoundError,该报错和网络驱动器是否挂载、父目录是否存在没有直接关系。
这是跨平台脚本开发的常见坑:类Unix系统(Linux/macOS)允许文件名包含冒号,相同代码在非Windows环境下可以正常运行,迁移到Windows环境就会触发路径非法问题。
修正方案
修改时间格式化字符串,把时间部分的冒号替换为Windows允许的合法命名字符(如下划线_、短横线-)即可,推荐同时改用24小时制格式避免上下午时间混淆。
修正后的可运行代码:
import shutil import os from datetime import datetime # 将时间部分的冒号替换为下划线,改用24小时制%H避免上下午混淆 date = datetime.now().strftime("%m_%d_%Y-%H_%M_%S") src = 'C:/test_folder' dst = f'Z:/Backup Files/backup_{date}' # 可选前置校验:提前判断路径可用性,减少运行时异常 if not os.path.isdir(src): raise FileNotFoundError(f"源备份目录 {src} 不存在") dst_parent = os.path.dirname(dst) if not os.path.isdir(dst_parent): raise FileNotFoundError(f"目标存储父目录 {dst_parent} 未挂载或无访问权限") shutil.copytree(src=src, dst=dst)
补充说明:Windows系统下文件/文件夹名禁止使用的字符共9个,分别是
/ \ : * ? " < > |,后续拼接动态路径文件名时需要全部避开。
内容的提问来源于stack exchange,提问作者BannyM
相关产品推荐
相关产品推荐

