有没有一种方法可以使用python从目录比较中排除特定的文件类型

2024-05-19 17:02:58 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是我所拥有的:

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的基本用户。在


Tags: nameinfromimportrightonlyfordef
2条回答

dircompignore不接受globs,只接受文本。在

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'])将按预期工作。在

未经测试。在

你能在事后做过滤吗?在

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)

相关问题 更多 >