Pathlib Path.rename()创建中间目录的方法?

时间:2018-10-27 23:59:14

标签: python python-3.x

我正在尝试在文件系统上移动一些文件。我想使用Python 3的Pathlib来做到这一点,尤其是Path.rename

说我想将Path('/a/b/c/d')移到Path('/w/x/y/z')

Path('/a/b/c/d').rename(Path('/w/x/y/z'))

给予

FileNotFoundError: [Errno 2] No such file or directory: '/a/b/c/d' -> '/w/x/y/z'

我可以用

解决此问题
os.makedirs(Path('/w/x/y', exist_ok=True)
Path('/a/b/c/d').rename(Path('/w/x/y/z'))

但是,这比传统的os优雅得多,后者有一种名为renames的方法可以为您完成这项工作。有没有办法在Pathlib中做到这一点?

3 个答案:

答案 0 :(得分:2)

pathlib.Path.mkdir()可用:

newname = Path('/w/x/y/z')
newname.parent.mkdir(parents=True, exist_ok=True)
Path('/a/b/c/d').rename(newname)

答案 1 :(得分:2)

这不是理想的方法,但可以使用以下方法

from pathlib import Path

def ensure(path):
    path.parent.mkdir(parents=True, exist_ok=True)
    return path

Path('a/b/c/before.txt').rename(ensure(Path('x/y/z/moved.txt')))

Pathlib.Path.mkdir不会返回任何内容,因此看起来像这样的包装是必需的。

答案 2 :(得分:0)

Pathlib.mkdir提供相同的父创建行为

Pathlib.rename不会创建父级,类似于rename()不会创建父级