如何使用shutil复制文件名含functional但未知完整名称的文件?
基于文件名关键字复制文件的解决方案
你可以通过文件匹配+循环遍历的方式解决这个问题,不用纠结日期变量,直接根据文件名包含functional的条件筛选文件即可,下面是两种实用方法:
方法一:用glob模块快速匹配文件
glob模块支持通配符匹配,能直接递归查找所有符合条件的文件,代码简洁高效:
import os import shutil from glob import glob # 替换成你的源文件根目录和目标文件夹路径 source_root = "/path/to/your/source/folders" dest_folder = "/path/to/your/destination" # 确保目标文件夹存在,不存在则创建 os.makedirs(dest_folder, exist_ok=True) # 递归查找所有子文件夹中文件名包含'functional'的文件 matched_files = glob(os.path.join(source_root, "**", "*functional*"), recursive=True) # 循环复制每个匹配到的文件 for file_path in matched_files: shutil.copy(file_path, dest_folder)
代码说明:
os.path.join:跨平台拼接路径,避免Windows和Linux路径格式冲突**:匹配任意层级的子文件夹*functional*:匹配文件名任意位置包含functional的文件recursive=True:开启递归遍历,会扫遍source_root下所有子文件夹
方法二:用os.walk遍历筛选文件
如果你想更灵活控制遍历过程,用os.walk逐个检查文件:
import os import shutil source_root = "/path/to/your/source/folders" dest_folder = "/path/to/your/destination" os.makedirs(dest_folder, exist_ok=True) # 遍历源目录下所有文件和子文件夹 for root, _, files in os.walk(source_root): for file_name in files: # 判断文件名是否包含'functional' if "functional" in file_name: src_file = os.path.join(root, file_name) shutil.copy(src_file, dest_folder)
注意事项:
- 如果目标文件夹存在同名文件,
shutil.copy会直接覆盖,若要避免覆盖,可以在复制前检查目标路径是否存在:dest_file = os.path.join(dest_folder, file_name) if not os.path.exists(dest_file): shutil.copy(src_file, dest_folder) - 若需要保留原文件夹结构复制,改用
shutil.copy2或者手动创建对应子文件夹后复制。
内容的提问来源于stack exchange,提问作者Will V
相关产品推荐
相关产品推荐

