Python中如何无需区分类型统一复制文件和文件夹
自动识别类型的通用复制实现
Python 标准库 shutil 没有提供原生的、无需区分源对象是文件/目录的统一复制接口,自行封装一个带类型判断的函数即可满足需求,逻辑非常简单:
import os import shutil def copy_auto(src: str, dst: str, **kwargs): if os.path.isfile(src): # 源为文件时调用文件复制逻辑 shutil.copy(src, dst, **kwargs) elif os.path.isdir(src): # 源为目录时调用目录递归复制逻辑 shutil.copytree(src, dst, **kwargs) else: raise ValueError(f"源路径 {src} 无效:既不是存在的文件也不是目录")
使用注意事项
- 如果你需要在目标目录已存在时覆盖内容,Python 3.8 及以上版本的
shutil.copytree支持dirs_exist_ok=True参数,调用时直接传入即可:copy_auto("your_src", "your_dst", dirs_exist_ok=True) - 如果需要保留文件的原始元数据(权限、修改时间等),把函数内的
shutil.copy替换为shutil.copy2即可 - 类型判断优先使用
os.path.isfile()和os.path.isdir(),不要仅用os.path.exists()做判断,避免软链接、特殊设备文件导致的逻辑错误
内容的提问来源于stack exchange,提问作者Luca.D
相关产品推荐
相关产品推荐

