Python中使用glob模块遍历带数字后缀的TXT文件失败,如何解决?
解决glob匹配imageN.txt文件的问题
嘿,我明白你遇到的麻烦了——你想用glob批量匹配image1.txt、image2.txt这类按数字编号的文本文件,但当前的代码没法正常工作,核心问题在于glob不支持正则表达式里的\d+语法,它有自己一套通配符规则,不能直接混用正则。
下面给你几个实用的解决方案:
方案1:glob通配符 + 正则过滤(最直接)
先用glob匹配所有image开头的txt文件,再用正则过滤出仅数字后缀的文件,兼顾灵活性和准确性:
import glob import re # 注意用原始字符串r""避免转义问题 for each_file in glob.glob(r"C:\你的文件夹路径\image*.txt"): # 用正则校验文件名是否符合image+数字+.txt的格式 if re.match(r".*image\d+\.txt$", each_file): print(each_file) # 在这里执行你的文件操作,比如读取、修改等
方案2:用Pathlib(Python3.4+ 更优雅)
Pathlib是Python标准库的现代文件路径工具,写法更简洁直观:
from pathlib import Path import re # 定义目标文件夹路径 target_folder = Path(r"C:\你的文件夹路径") # 遍历所有image开头的txt文件,再过滤符合规则的 for txt_file in target_folder.glob("image*.txt"): # 只校验文件名部分,更精准 if re.match(r"image\d+\.txt$", txt_file.name): print(txt_file) # 执行你的操作
为什么你的原始代码失效?
你写的glob.glob("C:\\...\\image\\d+\\.txt")有两个问题:
- glob不支持
\d+这种正则语法,它的通配符只有:*:匹配任意长度的任意字符?:匹配单个任意字符[0-9]:匹配单个数字(比如image[0-9].txt只能匹配image1-image9.txt)
- 路径里的
image\d+写法错误,应该是image直接跟通配符,而不是用\分隔。
如果你的文件名数字位数固定(比如都是1位或2位),也可以用纯glob匹配,比如image[0-9][0-9].txt匹配image00-image99.txt,但如果数字位数不固定,还是结合正则过滤更靠谱。
内容的提问来源于stack exchange,提问作者Sbobby
相关产品推荐
相关产品推荐

