1

我正在尝试使用 fnmatch 来匹配 Python 中的目录。但不是只返回与模式匹配的目录,而是返回所有目录或不返回。

例如:F:\Downloads 有子目录 \The Portland Show、\The LA Show 等

我试图仅在 \The Portland Show 目录中查找文件,但它也返回 The LAS show 等。

这是代码:

for root, subs, files in os.walk("."):
  for filename in fnmatch.filter(subs, "The Portland*"): 
    print root, subs, files

我不仅获得了子目录“The Portland Show”,还获得了目录中的所有内容。我究竟做错了什么?

4

1 回答 1

3

我只会使用glob

import glob
print "glob", glob.glob('./The Portland*/*')

但是,如果您出于某种原因确实想使用某些技巧,则可以玩一些技巧os.walk……例如,假设顶级目录仅包含更多目录。subs然后,您可以通过就地修改列表来确保只递归到正确的列表:

for root,subs,files in os.walk('.'):
    subs[:] = fnmatch.filter(subs,'The Portland*')
    for filename in files:
        print filename

现在在这种情况下,您将只递归到以开头的目录,The Portland然后您将在其中打印所有文件名。

.
+ The Portland Show
|   Foo
|   Bar
+   The Portland Actors
|     Benny
|     Bernard
+   Other Actors
|     George
+ The LA Show
|   Batman

在这种情况下,您会看到Foo, BarBennyBernard您不会看到Batman

于 2013-08-17T04:41:29.393 回答