问题:
>>> 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
可以正常工作吗?
示例:
尝试从“路径”和“文件名”中获取文件路径,并且考虑到该文件位于 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
使用路径库的替代执行
>>> 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:
。
相关问题:
最佳答案
absolute()
方法实际上并不是 pathlib.Path
记录的公共(public) API 的一部分。它实际上不起作用,你不应该使用它。它的source code中有评论说诸如“XXX 尚未测试!”之类的话和“修复我”。
获取绝对路径的实际记录方法是 Path.resolve()
。我认为对于这一输入应该表现正确...但我认为“表现正确”意味着返回 C 驱动器上当前工作目录的绝对路径。我认为它不会返回 'C:\\'
。此外,与 os.path.abspath 不同,Path.resolve 需要一个实际解析为某些内容的路径,并且它还会解析符号链接(symbolic link)。
如果您想要像os.path.abspath
那样的行为,请使用os.path.abspath
。 Pathlib 不支持该函数的直接等效项。
关于python - pathlib.Path ('C:' ).absolute().is_absolute() 返回 False,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72846126/