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

Python glob路径含方括号被识别为正则报错 如何正确匹配.cue文件

问题根源

你遇到的报错是因为glob模块会把传入路径中的[]、*、?识别为通配符语法的一部分,文件名里的[Maxi-Single]会被glob当成字符匹配规则,方括号内的短横线会被解析为ASCII范围匹配符,当范围左右字符的ASCII顺序不符合要求时就会抛出正则范围错误。
你之前使用re.escape无效的原因是:re.escape是为正则语法设计的转义方法,会转义所有正则特殊字符(包括空格、括号、短横线等),而glob的转义规则和纯正则不兼容,多余的转义反而会引发新的语法错误。

解决方案

方案1(推荐):放弃glob,直接遍历文件判断后缀

这种方法完全避开了路径特殊字符的问题,逻辑更简洁,同时天然支持不区分大小写的后缀匹配:

import os

def find_cue_files(path):
    found_files = []
    for root, dirs, files in os.walk(path):
        for file in files:
            # 不区分大小写判断是否为.cue后缀
            if file.lower().endswith('.cue'):
                found_files.append(os.path.join(root, file))
        # 其余原有逻辑...
    return found_files

方案2:对路径做glob专属转义后再使用glob

如果一定要保留glob的写法,先对路径中的glob特殊字符做专属转义:

import os
import glob

def glob_escape(path_str):
    # 仅转义glob识别的4个特殊字符
    for c in ('*', '?', '[', ']'):
        path_str = path_str.replace(c, f'[{c}]')
    return path_str

def find_cue_files(path):
    found_files = []
    for root, dirs, files in os.walk(path):
        if files:
            escaped_root = glob_escape(root)
            fcue = glob.glob(os.path.join(escaped_root, '*.[Cc][Uu][Ee]'))
            # 其余原有逻辑...
    return found_files

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 23:24:02