我正在尝试在文件系统上移动一些文件。我想使用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中做到这一点?
答案 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()不会创建父级