0

我有文件夹/a/b/c/d/,我想复制d/到目的地/dst/

但是,shutil.copytree("/a/b/c/d", "/dst")产生/dst/a/b/c/d.

我只想要/dst,甚至/dst/d就足够了,但我不想要所有的中间文件夹。

[编辑]

正如其他人所指出的,copytree 做了我想做的事——我无意中将源的完整路径添加到了我的目的地!

4

2 回答 2

1

鉴于此文件结构(在我的目录上/tmp):

a
└── b
    └── c
        └── d
            ├── d_file1
            ├── d_file2
            ├── d_file3
            └── e
                ├── e_file1
                ├── e_file2
                └── e_file3

如果你这样做shutil.copytree("/tmp/a", "/tmp/dst"),你会得到:

dst
└── b
    └── c
        └── d
            ├── d_file1
            ├── d_file2
            ├── d_file3
            └── e
                ├── e_file1
                ├── e_file2
                └── e_file3

但如果你这样做shutil.copytree('/tmp/a/b/c/d', '/tmp/dst/d'),你会得到:

dst
└── d
    ├── d_file1
    ├── d_file2
    ├── d_file3
    └── e
        ├── e_file1
        ├── e_file2
        └── e_file3

并且shutil.copytree('/tmp/a/b/c/d', '/tmp/dst')

dst
├── d_file1
├── d_file2
├── d_file3
└── e
    ├── e_file1
    ├── e_file2
    └── e_file3

shutil.copytree也采用相对路径。你可以做:

import os
os.chdir('/tmp/a/b/c/d')    
shutil.copytree('.', '/tmp/dst')

或者,从 Python 3.6 开始,您可以使用pathlib参数来执行以下操作:

from pathlib import Path
p=Path('/tmp/a/b/c/d')
shutil.copytree(p, '/tmp/dst')

无论哪种情况,您都会得到与shutil.copytree('/tmp/a/b/c/d', '/tmp/dst')

于 2020-08-20T17:14:01.940 回答
1

那是什么shutil.copytree

shutil.copytree 递归地复制以 src 为根的整个目录树到名为 dst 的目录

所以问题中的陈述:

shutil.copytree("/a/b/c/d", "/dst")产生/dst/a/b/c/d.

是错误的。这会将d(和子目录)的内容复制到/dst

于 2020-08-20T16:20:11.483 回答