2014-09-01 139 views
1

我使用os.walk()来获取文件名。我需要做的是创建一个文件名列表匹配以下模式:Python正则表达式匹配文件名。使用os.walk()获取文件名

如果'*'将匹配所有文件。

如果'h*'将匹配所有以h开头的文件。

如果'*h'将匹配所有以h结尾的文件。

如果'*h*'将匹配其中包含h的所有文件。

如果[h-w]*将在一套匹配任何一个字符,包括设置否定[^ H-W]

我新的正则表达式,我有if语句创建一个针对此问题的困扰。可能有人向我解释(可能有代码示例)如何做到这一点。谢谢。

+0

'*'不是一个有效的正则表达式。也许你想要一个'fnmatch'类型的模式? – 2014-09-01 21:06:46

+0

此外,正则表达式'h *'匹配名为'h','hh','hhh'等的文件,但不包含其他文件。 **模式**'h *'匹配以'h'开始的文件名。 – 2014-09-01 21:07:50

+0

@AvinashRaj,不 - 这显然将正则表达式与fnmatch样式模式混合在一起。 '* h'不是一个有效的正则表达式 - '*'字符必须在其之前有其他东西,因为它会将先前的标记修改为0或更多。 – 2014-09-01 21:08:41

回答

1

我试过fnmatch,它的工作完美,非常感谢Charles Duffy。 这是我的代码:

for dp, dn, filenames in os.walk(path): 
    for ff in filenames: 
     if fnmatch.fnmatch(ff, 'My patterns here'): 
      list.append(os.path.join(dp, ff)) 
+0

你可以在fnmatch.filter(filenames,'[hw] *')]''中使用'matching_files = [os.path.join(root,fn)作为fn。或用'yield'替换'list.append'。 – jfs 2014-09-02 12:39:42