在python中复制(使用copytree)时排除一些子文件夹

tec*_*rhl 4 python

我正在尝试实施DIR-COPY.我的意见是这样的..

    source = D/Test/Source
    Target = D/Test/Target
    Ignore_Pattern = '*.exe'
    Exclude_Sub_Folder = D/Test/Source/Backup,D/Test/Source/Backup2
Run Code Online (Sandbox Code Playgroud)

我可以使用copytree中的 ignore属性忽略.exe文件 这样做了

    shutil.copytree(source , Target ,ignore=shutil.ignore_patterns(Ignore_Pattern)) 
Run Code Online (Sandbox Code Playgroud)

我不知道如何排除源目录中的一些子文件夹.

请帮忙.....

谢谢

Kev*_*vin 8

您可以忽略名称为Backup或Backup2的所有文件夹:

shutil.copytree(source , Target ,ignore=shutil.ignore_patterns(Ignore_Pattern, "Backup", "Backup2"))
Run Code Online (Sandbox Code Playgroud)

"但我有多个名为'Backup'的文件夹,我特别想忽略Test/Source目录中的那个",你说.在这种情况下,您需要提供一个自定义忽略函数来调查完整路径.

to_exclude = ["D:/Test/Source/Backup", "D:/Test/Source/Backup2"]

#ignores excluded directories and .exe files
def get_ignored(path, filenames):
    ret = []
    for filename in filenames:
        if os.path.join(path, filename) in to_exclude:
            ret.append(filename)
        elif filename.endswith(".exe"):
            ret.append(filename)
    return ret

shutil.copytree(source , Target ,ignore=get_ignored)
Run Code Online (Sandbox Code Playgroud)

(请注意to_exclude为您的特定操作系统使用正确的路径分隔符.您不希望包含"Test\Source\Backup",因为您使用了错误的斜杠.)