2016-04-25 11 views
1

を使用して、ディレクトリ比較ですから、特定のファイルタイプを除外するための方法はありますが、私が持っているものです。結果から* .lockファイルをフィルタリングしたり除外したりできます。私はdircmpに関連する無視関数を見ましたが、結果を返すことができませんでした。私はPythonの非常に基本的なユーザーです。ここでのpython

答えて

1

dircompさんignore、リテラルだけをグロブを負いません。それはでfilecmp._filterを置き換えることにより、修正するのは難しいことではないでしょう

:期待どおりdircmpを呼び出してから、dircmp(..., ignore=['*.lock'])

from fnmatch import fnmatch 
def _filter(flist, skip): 
    return [item for item in flist 
       if not any(fnmatch(item, pat) for pat in skip)] 
filecmp._filter = _filter 

はこれを行うには働くだろう。

未テスト。

+0

それはうまくいった。ありがとうございましたDan D. –

+0

技術的には、 'ignore'は' object .__ contains__'だけを見ています。 '__contains__'がグロブまたは正規表現と照合するカスタムのコンテナを作成することができます。私は、実装の詳細をオーバーライドするよりは少しハッキリではないと思う(しかし、まだハッキーです)。 – mgilson

0

事実の後にフィルタリングを行うことはできますか?

import filecmp 
from filecmp import dircmp 
def print_right_only(dcmp): 
    for name in dcmp.right_only: 

     if name.endswith('.lock'): # Check if it is a lock file. 
      continue 

     print "%s not found in %s but found in %s" % (name, dcmp.left, 
      dcmp.right) 
    for sub_dcmp in dcmp.subdirs.values(): 
     print_right_only(sub_dcmp) 

dcmp = dircmp('E:\GIS', 'J:\GIS') 
print_right_only(dcmp) 
+0

これも同様に機能しました。ありがとう、mgilson。 –