Python 3.8中如何用fnmatch匹配纯数字命名的.txt文件?
解决方案
问题原因
你提到的+([0-9]).txt或[0-9]{6}.txt属于fnmatch的扩展匹配模式,默认是关闭的,需要显式启用才能生效。另外你之前尝试的模式要么范围太宽(比如*[0-9].txt会匹配含数字的任意文件名),要么混用了正则语法(fnmatch不直接支持\b\d+这类正则表达式)。
方法一:启用fnmatch扩展模式
通过fnmatch.FNM_EXTENDED标志开启扩展匹配,使用+([0-9]).txt模式匹配一个或多个纯数字命名的.txt文件:
import fnmatch from pathlib import Path source_file_path = "/files/tst_files/" # 扩展模式:匹配1个及以上数字,后缀为.txt source_file_pattern = "+([0-9]).txt" files = Path(source_file_path).glob('*') for file in files: # 针对文件名匹配,同时启用扩展标志 if fnmatch.fnmatch(file.name, source_file_pattern, flags=fnmatch.FNM_EXTENDED): print(file)
方法二:直接用pathlib判断(更直观)
不需要依赖fnmatch,直接通过pathlib的stem属性获取文件名(不含后缀),再用isdigit()判断是否全为数字:
from pathlib import Path source_file_path = "/files/tst_files/" # 先过滤所有.txt文件 files = Path(source_file_path).glob('*.txt') for file in files: # 判断文件名主体是否全为数字 if file.stem.isdigit(): print(file)
补充说明
- 如果需要匹配固定位数的数字(比如6位),可以在扩展模式里用
[0-9]{6}.txt,同样要加FNM_EXTENDED标志。 - 推荐方法二,逻辑更清晰,避免fnmatch模式的语法限制。
内容的提问来源于stack exchange,提问作者rainingdistros
相关产品推荐
相关产品推荐

