python-3.x 路径库,Path.relative_to不解析路径

ycl3bljg  于 2023-02-17  发布在  Python
关注(0)|答案(1)|浏览(123)

当我使用Path.relative_toos.path.relpath时,我得到了一个不对称的行为,见下面的例子。在os模块中的工具通信中,我被引导相信它们的行为是相同的。
我在用两条路径

  • C:\Sync\Rmaster_head_\bin
  • C:\Sync\installed

我用的是Python 3.9.15。

操作系统路径关系路径

>>> import os.path
>>> import pathlib
>>> start = pathlib.Path(r"../../installed")
>>> rel_path = os.path.relpath(pathlib.Path(r"C:/Sync/Rmaster_head_/bin"), start=start)
>>> rel_path
'..\\..\\..\\..\\Sync\\Rmaster_head_\\bin'
>>> start / pathlib.Path(rel_path)
WindowsPath('../../installed/../../../../Sync/Rmaster_head_/bin')
>>> (start / pathlib.Path(rel_path)).resolve()
WindowsPath('C:/Sync/Rmaster_head_/bin')

双向路径库.路径.相对于

x一个一个一个一个x一个一个二个x
我注意到异常表明其中一个路径是相对路径,但在使用完整路径时也不起作用。

>>> path1 = pathlib.Path(r"C:\Sync\Rmaster_head_\bin")
>>> path2 = pathlib.Path(r"C:\Sync\installed\R2023.1.175_install\documentation")
>>> os.path.relpath(path1, start=path2)
'..\\..\\..\\Rmaster_head_\\bin'
>>> os.path.relpath(path2, start=path1)
'..\\..\\installed\\R2023.1.175_install\\documentation'

并且path1.relative_to(path2)path2.relative_to(path1)都失效。
我错过了什么?

7lrncoxx

7lrncoxx1#

您所缺少的是pathlib文档中关于这些方法的注解:
relative_to()的文档下面:
注意:此函数是PurePath的一部分,用于字符串。它不检查或访问底层文件结构。
虽然仍然可以根据字符串推导出您要查找的相对路径,但显然该方法不能这样做,示例和错误消息对此都很清楚。
您在问题中提到的部分的顶部也明确提到了该函数不同于os.path.relpath()

**注意:**尽管os.path.relpath()PurePath.relative_to()有一些重叠的用例,但它们的语义差异很大,不足以保证它们是等效的。

相关问题