这是我所拥有的:
import filecmp
from filecmp import dircmp
def print_right_only(dcmp):
for name in dcmp.right_only:
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)
这完全按照需要工作。我希望能够从结果中过滤或排除 *.lock 文件。我确实看到了与 dircmp
相关的忽略函数,但无法让它返回任何结果。
最佳答案
dircomp
的 ignore
不接受全局变量,只接受文字。
将 filecmp._filter
替换为:
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
在调用 dircmp
之前执行此操作,然后 dircmp(...,ignore=['*.lock'])
将按预期工作。
未经测试。
关于python - 有没有办法使用 python 从目录比较中排除特定文件类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36846484/