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

