Skip to main content
 首页 » 编程设计

python之fnmatch 不适用于变量,但适用于静态字符串

2026年03月30日43qlqwjy

以下代码未找到文件 patterns 中定义的任何模式。

#!/usr/bin/env python 
 
import os 
import fnmatch 
 
patternFile = open('patterns', 'r') 
patterns = patternFile.readlines() 
for filename in os.listdir('.'): 
    for pattern in patterns: 
        if fnmatch.fnmatch(filename, pattern): 
            print "FOUND!" 

我的 pattern 文件看起来像

*test 
foo 

以下带有静态模式字符串的修改代码有效。正如预期的那样,可以找到一个名为 foofile 的文件。

patternFile = open('patterns', 'r') 
patterns = patternFile.readlines() 
for filename in os.listdir('.'): 
    if fnmatch.fnmatch(filename, '*test'): 
        print "FOUND!" 

有人知道这个问题吗?

请您参考如下方法:

readlines 在每一行的末尾包含换行符 \n,你需要做:

if fnmatch.fnmatch(filename, pattern.strip('\n\r'):