Python 中非递归的 shutil.copytree

0 投票
1 回答
1019 浏览
提问于 2025-04-18 07:39

我刚开始学习使用Python,想为一些文件创建一个新的文件夹结构。我正在使用os、shutil和copytree来完成以下操作:

原始文件夹结构:

top_folder/

    batch1/
        1.tif
        1.xml
        2.tif
        2.xml
        hello.tif
        hello.xml

    batch2/
        purple.tif
        purple.xml
        red.tif
        red.xml

结果文件夹结构:

top_folder/

    batch1/
        1/
            1.tif
            1.xml
        2/
            2.tif
            2.xml
        hello/
            hello.tif
            hello.xml

    batch2/
        purple/
            purple.tif
            purple.xml
        red/
            red.tif
            red.xml

我的问题是:我该如何使用copytree,只复制前两层文件夹,然后让copytree停止,接下来我再用自己的代码来处理批量文件夹内的其他文件夹结构?

这是我的代码:

import os, shutil, errno
def copy(src, dest):
    try:
        shutil.copytree(src, dest)
    except OSError as e:
        if e.errno == errno.ENOTDIR:
            #code here to transform folders
                else:
                    break
            else:
                print('Directory not copied. Error: %s' % e)

1 个回答

0

你可以使用 copytree 这个函数里的 ignore 参数来解决这个问题。简单来说,你可以用它来设置一个 glob 模式,这个模式可以包含你想要复制的所有内容,除了那些你不想复制的文件或文件夹。这样一来,其他的内容就会被匹配到,从而被忽略掉。你还可以创建一个自定义的 ignore 函数,让它按照你想要的方式工作。

想了解更多细节,可以查看这里,包括示例代码: https://docs.python.org/2/library/shutil.html#copytree-example

撰写回答