python - pathlib.Path ('C:' ).absolute().is_absolute() 返回 False

标签 python python-3.x pathlib os.path

问题:

>>> 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/

相关文章:

python - 如何放大绘图内部

python - 在 Linux 上将 Spyder 与 Python 2.7 和 Python 3 结合使用

python - VTK 不能用 vtkClipClosedSurface 构造一个合适的闭合曲面

python - 计算基于日期存储的给定文本文件中每个单词的出现次数

python Tornado websocket错误: RuntimeError: There is no current event loop in thread 'Thread-1'

python - 为什么这个嵌套列表理解会产生错误?

python - 如何查看mosquitto经纪商订阅的主题

python - 如何将 pathlib 与子进程一起使用

Python pathlib 如果目录不存在则创建目录

python - 为什么 python 脚本在 Spyder 与 cmd 提示符中的工作方式不同