如何解决Python复制文件时出现的NotADirectoryError: [Errno 20]报错?
报错原因
shutil.copytree() 是专门用于递归复制整个目录的方法,不可接收单个文件作为源参数,这就是触发NotADirectoryError的直接原因。
如果你之前尝试直接用shutil.copy2(i, 'case1'),虽然不会触发类型报错,但所有logs.txt会被直接放到case1根目录下,同名文件会互相覆盖,无法保留原有的目录结构。
实现方法
核心逻辑是先为每个待复制的文件在目标根目录下创建对应的父目录,再执行文件复制,代码示例如下:
import glob import os import shutil # 定义存放复制文件的目标根目录 target_root = "case1" for src_path in glob.glob("**/logs.txt", recursive=True): # 过滤掉目标目录内的文件,避免重复复制 if src_path.startswith(f"{target_root}/"): continue # 拼接得到文件在目标目录的完整存储路径 target_path = os.path.join(target_root, src_path) # 创建目标文件对应的父目录,exist_ok=True 表示目录已存在也不报错 os.makedirs(os.path.dirname(target_path), exist_ok=True) # 复制文件 shutil.copy2(src_path, target_path)
执行后效果
最终case1目录下会完整保留原有的子目录结构,仅包含你需要的logs.txt文件:
case1/ ├── esxi1/ │ └── logs.txt ├── esxi2/ │ └── logs.txt └── esxi3/ └── logs.txt
内容的提问来源于stack exchange,提问作者I'm not a robot
相关产品推荐
相关产品推荐

