Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种方法可以使用python从目录比较中排除特定的文件类型_Python_Directory_Ignore - Fatal编程技术网

有没有一种方法可以使用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
检查全局或正则表达式。我认为这比覆盖一个实现细节要简单一些(但仍然很麻烦)。