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
相关产品推荐
相关产品推荐

