hir*_*ist 18 python python-3.x python-3.4
python最近添加了pathlib模块(我非常喜欢!).
只有一件事我正在努力:是否可以规范化不存在的文件或目录的路径?我能完美地做到这一点os.path.normpath.但是,除了应该处理路径相关内容的库以外,还有什么不是荒谬的吗?
我想要的功能是:
from os.path import normpath
from pathlib import Path
pth = Path('/tmp/some_directory/../i_do_not_exist.txt')
pth = Path(normpath(str(pth)))
# -> /tmp/i_do_not_exist.txt
Run Code Online (Sandbox Code Playgroud)
但无需诉诸os.path和不必输入str和返回Path.也pth.resolve()不会为不存在的文件.
有一个简单的方法pathlib吗?
ent*_*nto 15
是否可以规范化不存在的文件或目录的路径?
从3.6开始,这是默认行为.请参阅https://docs.python.org/3.6/library/pathlib.html#pathlib.Path.resolve
路径.resolve (strict = False)
...
如果strict是False,则尽可能地解析路径,并附加任何余数而不检查它是否存在
从 Python 3.5 开始:不,没有。
PEP 0428规定:
路径分辨率
resolve() 方法使路径成为绝对路径,解析途中的任何符号链接(如 POSIX realpath() 调用)。这是唯一将删除“..”路径组件的操作。在 Windows 上,此方法还将注意返回规范路径(使用正确的大小写)。
由于resolve()是删除“..”组件的唯一操作,并且当文件不存在时它会失败,因此不会有简单的方法只使用pathlib..
此外,pathlib 文档还提供了有关原因的提示:
伪斜线和单点被折叠,但双点 ('..') 不会折叠,因为这会在符号链接面前改变路径的含义:
PurePath('foo//bar')产生PurePosixPath('foo/bar')
PurePath('foo/./bar')产生PurePosixPath('foo/bar')
PurePath('foo/../bar')产生PurePosixPath('foo/../bar')(天真的方法会使 PurePosixPath('foo/../bar') 等同于 PurePosixPath('bar'),如果 foo 是指向另一个目录的符号链接,则这是错误的)
综上所述,您可以在路径位置创建一个 0 字节的文件,然后就可以解析路径(从而消除 ..)。不过,我不确定这是否比您的 normpath 方法更简单。