2012-04-11 10 views
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時間以上、このを見つめ、そしてによって私自身のスクリプトへのイム恐れてイム事実上ブラインドされてきました今すぐ:<ダンリストを返すことができないか、返事の仕方を誤解していますが、リストから問題のない新しいvarにリストを渡す必要がありますか?

+3

だけ

  • 回避をendswithを使用することになり、ない機能
  • リターンは、印刷のようなキーワードである無用です注:関数の内部をインポートするのは本当に悪い考えです。これはモジュールの先頭で行います。 –

  • +0

    が注目されています。ヘッドアップの場合: –

    +0

    文字列の引数が1つだけの文字列フォーマットを続けている理由は何ですか?なぜその単一の文字列変数を使用しないのですか? – jdi

    答えて

    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 
    

    スタイルをプログラミングについて:

    • は、あなたがコメントで何をしているか繰り返しません。私がsource ="D:\\01_SVN\\01_DE\\trunk\\Game"使用の
    • 代わりに、機能にインポートすることfnmatch.filterむしろsource=r"D:\01_SVN\01_DE\trunk\Game"
    +0

    Ouuh dammit * facepalm * Thx、それはそれを解決しました。 –

    +0

    @NilsDiefenbachいいえpb :-)答えは「はい、少し間違っていますが、それは問題ではありません」です。受け入れることを忘れないでください。 – Simon

    +0

    完了 - アドバイスのためにthx :) –

    関連する問題