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

Ale*_*ail 6 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'))
Run Code Online (Sandbox Code Playgroud)

FileNotFoundError: [Errno 2] No such file or directory: '/a/b/c/d' -> '/w/x/y/z'
Run Code Online (Sandbox Code Playgroud)

我可以解决这个问题

os.makedirs(Path('/w/x/y', exist_ok=True)
Path('/a/b/c/d').rename(Path('/w/x/y/z'))
Run Code Online (Sandbox Code Playgroud)

但这不如老式os优雅,后者有一个名为renames的方法,可以为您执行此操作。有没有办法在 Pathlib 中做到这一点?

jed*_*rds 6

这并不理想,但类似以下内容会起作用

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')))
Run Code Online (Sandbox Code Playgroud)

Pathlib.Path.mkdir 不返回任何东西,所以看起来像这样的某种包装是必要的。


Apa*_*ala 5

pathlib.Path.mkdir()可用:

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