问题:
>>> from pathlib import Path
>>> Path('C:').absolute().is_absolute() # Is 'C:' absolute if we try to make it with pathlib?
False
>>> os.path.isabs(os.path.abspath('C:')) # Is 'C:' absolute if we try to make it with os.path?
True
>>> os.path.isabs('C:') # Is 'C:' absolute on it's own?
False
# Correct way to get absolute path as suggested in answers below
>>> Path('C:').resolve()
WindowsPath('C:/Windows/system32') # We get a folder we have launched Python from
- 为什么
Path.absolute()
返回非绝对路径 - 谁对谁错
- 额外的问题:哪个函数将windows的驱动器号
(C:)
封装到路径(C:\)
,所以os.path.join
可以正常工作
示例:
尝试从"路径"one_answers"文件名"中获取一个文件路径,如果该文件位于Windows操作系统磁盘的根目录中,您将难以创建一个功能的路径
>>> a_path = 'C:'
>>> a_file_name = 'foo.txt'
>>> os.path.join(a_path, a_file_name)
'C:foo.txt'
>>> os.path.isabs(os.path.abspath('C:'))
True
如果您在C:\foo.txt之前创建文件,则会增加一些混乱;你会得到:
>>> os.path.exists('C:foo.txt')
False
>>> os.path.exists(os.path.abspath('C:foo.txt'))
False
使用pathlib 的替代执行
>>> from pathlib import Path
>>> Path('C:').joinpath('foo.txt')
WindowsPath('C:too.txt')
>>> Path('C:').joinpath('foo.txt').is_absolute()
False
现实生活情况:
显然,如果有问题的文档位于C:驱动器上的根文件夹中,Cinema4D的Python SDK方法doc.GetDocumentPath()
实际上返回C:
。
相关问题:
- https://stackoverflow.com/a/35909115/4566456
- 如何获取路径库的绝对路径。路径对象
absolute()
方法实际上不是pathlib.Path
文档化的公共API的一部分。它实际上并不起作用,你也不应该使用它。它的源代码中有注释,上面写着";XXX尚未测试"以及";FIXME";。
获得绝对路径的实际、有文档记录的方法是Path.resolve()
。我认为一个应该对此输入表现正确。。。但我认为";行为正确";意味着返回C驱动器上当前工作目录的绝对路径。我认为它不会返回'C:\'
。此外,与os.path.abspath
不同,Path.resolve
需要一个实际解析为某个内容的路径,它还将解析符号链接。
如果您想要类似os.path.abspath
的东西,请使用os.path.abspath
。Pathlib不支持该函数的直接等效项。