如何使用Shutil复制含Tax_的文件?脚本实现问题求助
解决方法:修正Shutil文件复制脚本的问题
我来帮你排查下脚本里的关键问题,然后给出可行的修正方案:
你的脚本存在的几个核心问题
- 循环遍历对象错误:你写的
for files in src:是在逐个遍历src这个路径字符串的字符,而不是遍历目标文件夹里的文件,这完全不符合你的需求。 - 误用
shutil.which():这个函数的作用是在系统PATH环境变量中查找可执行程序的路径,根本不适合用来定位指定文件夹里的普通文件,所以用它肯定找不到目标文件。 - 路径拼接与判断逻辑问题:就算你遍历到了文件名,直接用
shutil.copy(files,dst)会报错,因为files只是纯文件名,不是完整的文件路径;另外你写的'bdd' in files和需求的“包含Tax_”完全不匹配。
修正后的脚本方案
方案一:使用os模块遍历文件
import shutil import os # 定义源文件夹和目标文件夹路径 src_dir = os.path.expanduser('~/Documents/Tax 2018') dst_dir = os.getcwd() # 遍历源文件夹下的所有文件/文件夹名称 for filename in os.listdir(src_dir): # 判断文件名是否包含"Tax_" if 'Tax_' in filename: # 拼接完整的源文件路径 src_file_path = os.path.join(src_dir, filename) # 确保只处理文件(跳过子文件夹) if os.path.isfile(src_file_path): shutil.copy(src_file_path, dst_dir)
方案二:使用glob模块(更简洁)
glob模块可以直接通过通配符匹配文件,代码更简洁:
import shutil import os import glob src_dir = os.path.expanduser('~/Documents/Tax 2018') dst_dir = os.getcwd() # 用通配符匹配所有包含"Tax_"的文件,直接获取完整路径 for src_file_path in glob.glob(os.path.join(src_dir, '*Tax_*')): # 确保只处理文件 if os.path.isfile(src_file_path): shutil.copy(src_file_path, dst_dir)
关键说明
os.path.join():用来拼接文件路径,避免手动拼接字符串出现的跨平台问题(比如Windows和Linux的路径分隔符不同)。os.path.isfile():过滤掉源文件夹中的子文件夹,只复制文件。- 如果你需要匹配以Tax_开头的文件,把通配符改成
Tax_*即可(对应方案二),或者把判断条件改成filename.startswith('Tax_')(对应方案一)。
内容的提问来源于stack exchange,提问作者DivZ
相关产品推荐
相关产品推荐

