Python循环中按文件名复制指定文件问题求助
问题分析与修复方案
原代码存在几个关键问题导致无法正常运行:
- 正则表达式语法错误:你用
f"{i}*.xlsx"作为正则匹配规则,但正则中*是重复量词(表示前面的字符出现0次或多次),不是通配符,这会导致匹配逻辑失效。 - 路径拼接错误:
glob.glob(os.path.join(path, "*.xlsx"))返回的已经是完整的文件路径,再用os.path.join(path, file)会生成重复的错误路径,导致shutil.copy找不到文件。 - 不必要的正则使用:这里只需要匹配文件名开头的数字前缀,用字符串方法更简单高效,无需正则。
修复后的代码
import os import shutil import glob path = "G:/Test/destina/" new_path = "D:/dir/" # 确保目标目录存在,避免复制时出错 os.makedirs(new_path, exist_ok=True) # 获取所有xlsx文件的完整路径 files = glob.glob(os.path.join(path, "*.xlsx")) # 目标前缀:匹配文件名开头为35或36的文件 target_prefixes = ("35", "36") for file in files: # 提取文件名(去掉路径部分) filename = os.path.basename(file) # 判断文件名是否以目标前缀开头 if filename.startswith(target_prefixes): # 直接复制完整路径的文件到目标目录 shutil.copy(file, new_path)
关键修改说明
- 新增目录检查:用
os.makedirs(new_path, exist_ok=True)确保目标目录存在,避免因目录不存在导致复制失败。 - 简化匹配逻辑:用
os.path.basename(file)提取纯文件名,再通过startswith判断是否符合前缀条件,比正则更直观且不易出错。 - 修正路径问题:直接使用
glob返回的完整文件路径作为shutil.copy的源路径,避免重复拼接路径。
内容的提问来源于stack exchange,提问作者Roq
相关产品推荐
相关产品推荐

