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

Python如何仅在指定target文件夹下查找特定格式的tar.gz文件

问题解决

你代码中存在3个核心错误导致无法匹配到文件:

  • 变量名笔误:代码中定义了target_dir变量,但调用glob.glob时错写为未定义的target_folder,直接导致路径拼接错误
  • glob语法误用:glob模块默认使用Shell通配符规则,不支持正则表达式语法,你传入的正则规则无法被glob识别
  • 正则规则与示例不匹配:你写的正则要求文件名包含-分隔符,但你给出的示例文件4.14.440.4569874.tar.gz没有任何横杠,且正则中的.未转义,会匹配任意字符而非字面量点

修正方案

推荐先用glob匹配当前目录下所有.tar.gz文件,再用正则做精确格式校验,既符合不遍历子目录的要求,又能保证匹配精度。

import os
import glob
import re

path_elements = ['/home/work/checkouts/repos/chinos', '/home/work/checkouts/repos/walmart', '/home/work/checkouts/repos/players', '/home/work/checkouts/repos/k7', '/home/work/checkouts/repos/distributor', '/home/work/checkouts/repos/matlab']
# 先编译正则,提升循环匹配效率,当前规则适配你给出的示例格式:数字.数字.数字.数字.tar.gz
# 如果实际命名规则确实带横杠,可自行调整正则规则,比如改为r'^.*-\d+\.\d{1,2}\.\d{3}-\d{6,7}\.tar\.gz$'
pattern = re.compile(r'^\d+\.\d{1,2}\.\d{3}\.\d{6,7}\.tar\.gz$')

for dir_path in path_elements:
    target_dir = os.path.join(dir_path, 'target')
    # 过滤不存在的target目录
    if not os.path.isdir(target_dir):
        continue
    # 匹配target目录下所有tar.gz文件,不遍历子目录
    all_tar_files = glob.glob(os.path.join(target_dir, '*.tar.gz'))
    for tar_path in all_tar_files:
        # 取文件名做正则校验
        file_name = os.path.basename(tar_path)
        if pattern.match(file_name):
            print(f"Tar.gz of expected format is available under the {target_dir}")
            # 找到一个符合要求的即可跳出当前目录的循环,不需要继续判断
            break

改动说明

  • 修正了变量名错误,用os.path.join拼接路径,避免不同操作系统路径分隔符不兼容的问题
  • 提前编译正则表达式,循环匹配时效率更高
  • 逻辑分层:先过滤存在的target目录,再批量获取所有tar.gz文件,最后做正则校验,后续排查问题更方便

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:18:02