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

Python基于部分文件名批量复制文件遇空结果问题求助

问题原因

你代码里的匹配逻辑完全错了——Class_01_*.txt是通配符模式,不是子字符串,用if list in file判断的话,只会找文件名里有没有Class_01_*.txt这个完整字符串,而实际文件名里根本没有*,所以这个条件其实从来没触发过,你看到的打印大概率是之前测试的残留。

修复代码

用Python自带的fnmatch模块处理通配符匹配,这才是正确的姿势,修改后的代码如下:

import os, shutil, fnmatch

path = 'G:/source/path/dir'
new_path = 'D:/test'
files = os.listdir(path)
# 修正range写法:Python里数字前加0会被当成八进制,直接写十进制更稳妥
lt = [*range(1, 3), *range(2178, 2186), *range(5020, 5024)]
patterns = [f"Class_{i}_*.txt" for i in lt]

# 先确保目标目录存在,不然复制会报错
if not os.path.exists(new_path):
    os.makedirs(new_path)

for file in files:
    for pattern in patterns:
        # 用fnmatch判断文件名是否符合通配符模式
        if fnmatch.fnmatch(file, pattern):
            print(file)
            src_file = os.path.join(path, file)
            shutil.copy(src_file, new_path)
关键改动说明
  • 通配符匹配:fnmatch.fnmatch(file, pattern)能正确识别*通配符,匹配任意长度的字符,完全符合你的需求。
  • 数字范围修正:range(01,03)会被解析为八进制,容易出问题,换成range(1,3)才是正确的十进制范围。
  • 目标目录检查:添加目录创建逻辑,避免因为目标目录不存在导致复制失败。
  • 变量名优化:把list改成pattern,避免和Python内置的list类型重名,减少潜在bug。

内容的提问来源于stack exchange,提问作者Roq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:32:16