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

この場合、FooBarBennyおよびは表示されますが、Bernardは表示されませんBatman

于 2013-08-17T04:41:29.393 に答える