首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不带文件的shutil.copytree

不带文件的shutil.copytree
EN

Stack Overflow用户
提问于 2013-03-28 00:12:03
回答 6查看 7.3K关注 0票数 12

我正在尝试使用shutil.copytree:

代码语言:javascript
复制
shutil.copytree(SOURCE_DIR, TARGET_DIR, ignore=None)

此副本还包括文件夹中的文件。我只需要复制文件夹没有任何文件。该怎么做呢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-03-28 00:35:55

您可以通过提供"ignore“函数来实现这一点

代码语言:javascript
复制
def ig_f(dir, files):
    return [f for f in files if os.path.isfile(os.path.join(dir, f))]

shutil.copytree(SRC, DES, ignore=ig_f)

基本上,当您调用copytree时,它将递归地转到每个子文件夹,并向ignore函数提供该文件夹中的文件列表,以根据模式检查这些文件是否合适。被忽略的文件将在函数的末尾以列表的形式返回,然后,copytree将只复制该列表中排除的项目(在您的示例中,包含当前文件夹中的所有文件)。

票数 17
EN

Stack Overflow用户

发布于 2013-03-28 01:30:49

这是一个基于os.walk()@Oz123's solution实现

代码语言:javascript
复制
import os

def create_empty_dirtree(srcdir, dstdir, onerror=None):
    srcdir = os.path.abspath(srcdir)
    srcdir_prefix = len(srcdir) + len(os.path.sep)
    os.makedirs(dstdir)
    for root, dirs, files in os.walk(srcdir, onerror=onerror):
        for dirname in dirs:
            dirpath = os.path.join(dstdir, root[srcdir_prefix:], dirname)
            try:
                os.mkdir(dirpath)
            except OSError as e:
                if onerror is not None:
                    onerror(e)
票数 2
EN

Stack Overflow用户

发布于 2013-03-28 00:18:01

您应该考虑使用os.walk

Here is an example for os.walk。这样,您可以列出所有目录,然后使用os.mkdir创建它们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15663695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档