You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python循环中按文件名复制指定文件问题求助

问题分析与修复方案

原代码存在几个关键问题导致无法正常运行:

  1. 正则表达式语法错误:你用f"{i}*.xlsx"作为正则匹配规则,但正则中*是重复量词(表示前面的字符出现0次或多次),不是通配符,这会导致匹配逻辑失效。
  2. 路径拼接错误:glob.glob(os.path.join(path, "*.xlsx"))返回的已经是完整的文件路径,再用os.path.join(path, file)会生成重复的错误路径,导致shutil.copy找不到文件。
  3. 不必要的正则使用:这里只需要匹配文件名开头的数字前缀,用字符串方法更简单高效,无需正则。

修复后的代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 17:27:07