如何获取pathlib.Path对象的绝对路径?

时间:2017-02-28 15:44:30

标签: python python-3.x pathlib

使用pathlib模块制作路径对象,如:

p = pathlib.Path('file.txt')

p对象将指向文件系统中的某个文件,因为我可以执行p.read_text()

如何在字符串中获取p对象的绝对路径?

似乎我可以使用例如os.path.abspath(p)来获取绝对路径,但是使用os.path方法很难,因为我认为pathlib应该是{os.path的替代1}}。

4 个答案:

答案 0 :(得分:48)

使用resolve()

只需使用Path.resolve(),就像这样:

p = p.resolve()

这使您的路径成为绝对路径,并用绝对部分替换所有相对部分。

避免绝对()

你应该不使用 absolute()(它几乎一样),因为它没有记录,未经测试,并被考虑删除。 (参见@Jim Fasarakis Hilliard创建的the bug report中的讨论)。

不同之处在于absolute()不会替换路径的相对部分,并且永远不会引发FileNotFoundError

注意FileNotFoundError

在早于v3.6的Python版本上,如果磁盘上没有路径,resolve() 引发FileNotFoundError

因此,如果存在任何风险,请使用p.exists()进行检查或尝试/捕获错误。

# check beforehand
if p.exists():
    p = p.resolve()

# or catch afterward
try:
    p = p.resolve()
catch FileNotFoundError:
    # deal with the missing file here
    pass

如果你正在处理一个不在磁盘上的路径,并且你没有使用Python 3.6+,那么最好恢复到{{1} }。

从3.6开始,如果使用os.path.abspath(str(p))参数,resolve()仅引发FileNotFoundError。

strict

但要注意,使用# might raise FileNotFoundError p = p.resolve(strict=True) 会使您的代码与3.6之前的Python版本不兼容,因为那些人​​不接受该论点。

答案 1 :(得分:23)

你正在寻找方法.absolute,如果我的理解是正确的,谁的文件说明:

>>> print(p.absolute.__doc__)
Return an absolute version of this path.  This function works
        even if the path doesn't point to anything.

        No normalization is done, i.e. all '.' and '..' will be kept along.
        Use resolve() to get the canonical path to a file.

在我的系统上有一个测试文件,它返回:

>>> p = pathlib.Path('testfile')
>>> p.absolute()
PosixPath('/home/jim/testfile')

This method似乎是PathPath继承对象的新增且仍未添加文档。

Created an issue to document this

答案 2 :(得分:8)

您可以使用.absolute()函数(奇怪的是,似乎没有记录)使您的路径绝对,然后str to convert it to a string

str(p.absolute())

答案 3 :(得分:0)

pathlib.Path.cwd() / p

这是recommended by CPython core developers作为“一种明显的方法”。

p.resolve()至少不会为Windows上不存在的文件返回绝对路径。

p.absolute()未记录。