如何将python formatstring与列表中的元素相匹配?

如何将python formatstring与列表中的元素相匹配?,python,design-patterns,format,match,Python,Design Patterns,Format,Match,我使用Python,有一个不同文件类型的文件名列表。文本文件可能如下所示: 01.txt 02.txt 03.txt ... 让我们假设文本文件都以这种方式编号。现在我想得到所有的文本文件,数字从1到25。因此,我想通过GUI提供一个格式字符串,如%02i.txt,以便识别所有匹配的文件名 到目前为止,我的解决方案是嵌套的for循环。外部循环遍历整个列表,内部循环对每个文件的计数从1到25: fmt='%02i.txt' 对于文件中的f: 对于范围(1,25+1)内的i: 如果f==fmt%i

我使用Python,有一个不同文件类型的文件名列表。文本文件可能如下所示:

01.txt
02.txt
03.txt
...
让我们假设文本文件都以这种方式编号。现在我想得到所有的文本文件,数字从1到25。因此,我想通过GUI提供一个格式字符串,如
%02i.txt
,以便识别所有匹配的文件名

到目前为止,我的解决方案是嵌套的
for
循环。外部循环遍历整个列表,内部循环对每个文件的计数从1到25:

fmt='%02i.txt'
对于文件中的f:
对于范围(1,25+1)内的i:
如果f==fmt%i:
#做事
这个嵌套循环看起来不太漂亮,复杂性为O(n²)。所以在很长的名单上可能需要一段时间有没有更聪明/更像蟒蛇的方法

是的,我可以使用像
^\d{2}\.txt$
这样的正则表达式,但是带有
%
的formatstring更容易键入

您可以使用一个集合:

fmt = '%02i.txt'
targets = {fmt % i for i in range(1, 25+1)}
然后


迭代文件的一种更具python风格的方法是使用模块


我不会将
glob
模块称为pythonic,而
set
s的良好使用通常是这样的。@RikPoggi它是一个用于查找遵循模式的文件名的模块。但是模式只能很简单,在这种情况下,我看不出有任何理由不使用它。我的印象是,如果可以的话,你应该使用内置模块。你的答案很好,我刚才在讨论“更具pythonic”的说法:
glob
可能是解决OP问题的标准方法,但这并不意味着它既不是pythonic也不是pythonic。很好的解决方案。我用了这个。:-)
for f in files:
    if f in targets:
        # do stuff
>>> import glob
>>> for f in glob.iglob('[0-9][0-9].txt'):
        print f


01.txt
02.txt
03.txt