有没有一种方法可以使用python从目录比较中排除特定的文件类型
以下是我所拥有的:有没有一种方法可以使用python从目录比较中排除特定的文件类型,python,directory,ignore,Python,Directory,Ignore,以下是我所拥有的: 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
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相关的ignore函数,但无法让它返回任何结果。我是python的基本用户。事后你能做过滤吗
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)
dircomp
的ignore
不接受全局变量,只接受文本
通过将filecmp.\u 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'])
将按预期工作
未测试。从技术上讲,
忽略
只查看对象。\uuuu包含\uuu
。您可以创建一个自定义的“容器”,其中\uuuuuu包含\uuuuu
检查全局或正则表达式。我认为这比覆盖一个实现细节要简单一些(但仍然很麻烦)。