0

ディレクトリをたどり、そのディレクトリ内の特定の拡張子で終わるすべてのファイルを取得し、そのファイルをリストに書き込もうとしています。これは、関数がその仕事を終えた後に返されるはずのリストです。

def grabFiles(source,ext):
    import fnmatch
    import os

    matches = [] #tmp var which is used to return the files matching the search mask.
    for root, dirnames, filenames in os.walk(source):   #for each folder & subfolder do:
        for filename in fnmatch.filter(filenames, ext): #and for each file found like that do:
            matches.append(os.path.join(root, filename))#append the file name&directory to the "matches" variable.
    return(matches) #return the content of matches

これを実行すると、次のようになります。

ext=[".caf", ".lmg", ".chr", ".cdf", ".dds", ".tif", ".mtl", ".cgf", ".cga"]

for filetype in ext:
     files= nPy.grabFiles("D:\\01_SVN\\01_DE\\trunk\\Game",filetype)
     print files

ext リスト内の各拡張子のファイルを含むリストが返されるべきだと思いますよね? 代わりに、ext リストの各項目に対して [ ] を返します。

定義を使用せずにこれを起動すると、問題なく動作します:/

import fnmatch
import os
source ="D:\\01_SVN\\01_DE\\trunk\\Game"  
extension = ["*.mtl","*.tif","*.chr"] 
matches = []
for filetype in extension:
    for root, dirnames, filenames in os.walk("%s" % (source)):
        for filename in fnmatch.filter(filenames, "%s" % (filetype)):
            matches.append(os.path.join(root, filename))
print matches  

私はこれを1時間以上見つめてきましたが、今では自分のスクリプトに実質的に盲目になっているのではないかと心配しています:<私はdangリストを返すことができないか、返す仕組みを誤解しています-しかし、それはからリストを渡す必要があります問題なく新しい変数に一致しますよね?

4

1 に答える 1

2

.extの代わりに一致していると思います*.ext。名前と一致するように星を追加してみてください。うまくいくはずです。

def grabFiles(source,ext):
    import fnmatch
    import os

    matches = []
    for root, dirnames, filenames in os.walk(source):
        for filename in fnmatch.filter(filenames, '*' + ext):
            matches.append(os.path.join(root, filename))
    return matches

あなたのプログラミングスタイルについて:

  • コメントで行っていることを繰り返さないでください。役に立たない
  • returnはprintのようなキーワードであり、関数ではありません
  • endswithむしろfnmatch.filterを使用します
  • 関数へのインポートは避けてください
  • source ="D:\\01_SVN\\01_DE\\trunk\\Game"使用する代わりにsource=r"D:\01_SVN\01_DE\trunk\Game"
于 2012-04-11T09:38:26.923 に答える