3

ドライブから別のドライブにファイルを見つけてコピーするために再帰的なグロブを使用しています

def recursive_glob(treeroot, pattern):
   results = []
   for base, dirs, files in os.walk(treeroot):

      goodfiles = fnmatch.filter(files, pattern)
      results.extend(os.path.join(base, f) for f in goodfiles)

return results

正常に動作します。ただし、フィルターに一致しない要素にもアクセスしたいと思います。

誰かが助けを提供できますか?ループ内に正規表現を作成することはできますが、もっと簡単な解決策が必要ですよね?

4

2 に答える 2

5

順序が重要でない場合は、次のセットを使用します。

goodfiles = fnmatch.filter(files, pattern)
badfiles = set(files).difference(goodfiles)
于 2011-12-27T13:46:20.840 に答える
1

ループ内の別のループos.walkも使用できます。

goodfiles = []
badfiles = []
for f in files:
  if fnmatch.fnmatch(f, pattern):
    goodfiles.append(f)
  else:
    badfiles.append(f)

注:このソリューションでは、ファイルのリストを1回だけ繰り返す必要があります。実際、os.path.joinパーツは上のループに移動できます。

于 2011-12-27T13:52:38.600 に答える