使用glob查找任意长度的数字

时间:2016-06-16 15:53:43

标签: python glob

我正在寻找找到包含模式myfile_[SomeNumber].txt

的所有文件的glob-pattern

我天真的尝试是

glob.glob("myfile_[0-9]*.txt")

但这也会找到myfile_[SomeNumber][AnyStuff].txt

表单上的所有文件

这个答案显示了如何以固定的长度进行操作,但这不是我想要的。 use python glob to find a folder that is a 14 digit number

1 个答案:

答案 0 :(得分:5)

您可能会将正则表达式语法与glob构造混淆。 globbing中的[0-9]*表示“单个数字后跟零个或多个任何字符”。请放弃*

扩展的globbing 中有一个“一个或多个”限定符,但glob不支持,所以除了使用正则表达式之外别无选择,即你自己的文件名模式匹配。有几种方法可以做到这一点,这里有一个:

import os
import re

files = []
for fname in os.listdir('.'):
    if re.match(r"myfile_[0-9]+.txt", fname):
        files.append(fname)

print files

请注意,RE与您的RE不完全相同,我使用+表示“前面一个模式中的一个”,*表示“零或更多” - 所以数字是可选的,这可能是你想要的(我不确定)。

大部分代码可以作为列表理解来完成,但这可能会失去一些可读性:

files = [fname for fname in os.listdir('.') 
        if re.match(r"myfile_[0-9]+.txt", fname)]