Equ*_*Dev 32 python python-3.x pathlib
使用以下pathlib
模块创建路径对象:
p = pathlib.Path('file.txt')
Run Code Online (Sandbox Code Playgroud)
该p
对象将指向文件系统中的某个文件,因为我可以这样做p.read_text()
.
如何p
在字符串中获取对象的绝对路径?
似乎我可以使用例如os.path.abspath(p)
获取绝对路径,但使用os.path
方法很难,因为我认为pathlib
应该替代os.path
.
flo*_*sla 68
只需使用Path.resolve(),如下所示:
p = p.resolve()
Run Code Online (Sandbox Code Playgroud)
这使您的路径绝对,并用绝对部分替换所有相对部分.
您不应该使用 absolute()
(几乎相同),因为它没有记录,未经测试,并考虑删除.(参见@Jim Fasarakis Hilliard创建的错误报告中的讨论).
不同之处在于absolute()不会替换路径的相对部分,并且永远不会提升FileNotFoundError
.
在Python版本早于V3.6,resolve()
并提出一个FileNotFoundError
如果路径不存在在磁盘上.
因此,如果存在任何风险,请检查beforhand with p.exists()
或try/catch错误.
# check beforehand
if p.exists():
p = p.resolve()
# or catch afterward
try:
p = p.resolve()
catch FileNotFoundError:
# deal with the missing file here
pass
Run Code Online (Sandbox Code Playgroud)
如果您正在处理一个不在磁盘上的路径,并且您没有使用Python 3.6+,那么最好还原到os.path.abspath(str(p))
.
从3.6开始,resolve()
如果使用strict
参数,则仅引发FileNotFoundError .
# might raise FileNotFoundError
p = p.resolve(strict=True)
Run Code Online (Sandbox Code Playgroud)
但请注意,使用strict
会使您的代码与3.6之前的Python版本不兼容,因为那些不接受该参数.
Jim*_*ard 33
你正在寻找这种方法.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.
Run Code Online (Sandbox Code Playgroud)
使用我的系统上的测试文件,它返回:
>>> p = pathlib.Path('testfile')
>>> p.absolute()
PosixPath('/home/jim/testfile')
Run Code Online (Sandbox Code Playgroud)
这个方法似乎是一个新的,仍然没有文档的添加Path
和Path
继承对象.
Vee*_*ech 30
如果您只是想要路径并且不想检查文件是否存在,您可以这样做
str(p)
Run Code Online (Sandbox Code Playgroud)
作为操作部分中的文档。
pathlib.Path.cwd() / p
Run Code Online (Sandbox Code Playgroud)
这是CPython 核心开发人员推荐的“一种明显的方式”。
p.resolve()
至少不会为 Windows 上不存在的文件返回绝对路径。
p.absolute()
是无证的。