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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 11:39:46