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

Use glob to find arbitrary length numbers

我正在寻找 glob 模式,它可以找到包含模式 myfile_[SomeNumber].txt

的所有文件

我天真的尝试是

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

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

形式的所有文件

这个答案展示了如何在固定长度上做到这一点,但在这种情况下这不是我想要的。 use python glob to find a folder that is a 14 digit number

您可能混淆了正则表达式语法和 glob 结构。 [0-9]* 在 globbing 中意味着 "a single digit followed by zero or more of any character"。所以删除 *.

extended globbing 中有一个 "one or more" 的限定符,但是 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 与您的不完全相同,我使用 + 表示 "one of more of the preceding pattern",* 表示 "zero or more" - 所以数字会是可选的,这可能是你想要的(我不确定)。

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

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