如何将python格式字符串与列表中的元素相匹配?

时间:2013-03-17 02:08:08

标签: python design-patterns format match

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

01.txt
02.txt
03.txt
...

我们假设文本文件都以这种方式编号。现在我想得到所有文本文件,其编号范围从1到25.所以我想通过GUI提供类似%02i.txt的格式字符串,以便识别所有匹配的文件名。

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

fmt = '%02i.txt'
for f in files:
    for i in range(1, 25+1):
        if f == fmt % i:
            # do stuff

这个嵌套循环看起来不太漂亮,复杂度是 O(n²)。所以在很长的名单上可能需要一段时间。 有更聪明/更智能的方法吗?

嗯,是的,我可以使用像^\d{2}\.txt$这样的正则表达式,但使用%的格式字符串更容易输入。

2 个答案:

答案 0 :(得分:2)

您可以使用一套:

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

然后

for f in files:
    if f in targets:
        # do stuff

答案 1 :(得分:0)

迭代文件的更加pythonic的方法是使用glob模块。

>>> import glob
>>> for f in glob.iglob('[0-9][0-9].txt'):
        print f


01.txt
02.txt
03.txt