Python shutil copytree: use ignore function to keep specific files types
我试图弄清楚如何将具有子文件夹的CAD图形(" .dwg","。dxf")从源目录复制到目标目录,并保持原始目录和子文件夹的结构。
- 原始目录:H:\ Tanzania ... \ Bagamoyo_Single_line.dwg
- 源目录:H:\ CAD \ Tanzania ... \ Bagamoyo_Single_line.dwg
我在以下帖子中从@martineau找到了以下答案:Python Factory Function
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | from fnmatch import fnmatch, filter from os.path import isdir, join from shutil import copytree def include_patterns(*patterns): """Factory function that can be used with copytree() ignore parameter. Arguments define a sequence of glob-style patterns that are used to specify what files to NOT ignore. Creates and returns a function that determines this for each directory in the file hierarchy rooted at the source directory when used with shutil.copytree(). """ def _ignore_patterns(path, names): keep = set(name for pattern in patterns for name in filter(names, pattern)) ignore = set(name for name in names if name not in keep and not isdir(join(path, name))) return ignore return _ignore_patterns # sample usage copytree(src_directory, dst_directory, ignore=include_patterns('*.dwg', '*.dxf')) |
更新时间:18:21。 以下代码按预期工作,但我想忽略不包含任何include_patterns('。dwg','。dxf')的文件夹
1
2
3 from shutil import copytree, ignore_patterns
copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))This will copy everything except
.pyc files and files or
directories whose name starts withtmp.
解释所发生的事情有些棘手(并非严格必要):
现在编写
1 | copytree(source, destination, ignore=include_patterns('*.dwg', '*.dxf')) |