Python 为什么列表中的os.path.join()和列表中的os.path.sep.join()在功能上不相同?

Python 为什么列表中的os.path.join()和列表中的os.path.sep.join()在功能上不相同?,python,python-3.x,os.path,Python,Python 3.x,Os.path,我正在开发一个需要拆分和重新连接一些文件路径的程序,我不确定当分离的路径中存在驱动器号时,为什么os.path.join(*list)和os.path.sep.join(list)会产生不同的结果 import os path = 'C:\\Users\\choglan\\Desktop' separatedPath = path.split(os.path.sep) # ['C:', 'Users', 'choglan', 'Desktop'] path = os.path.sep.jo

我正在开发一个需要拆分和重新连接一些文件路径的程序,我不确定当分离的路径中存在驱动器号时,为什么os.path.join(*list)和os.path.sep.join(list)会产生不同的结果

import os

path = 'C:\\Users\\choglan\\Desktop'

separatedPath = path.split(os.path.sep)
# ['C:', 'Users', 'choglan', 'Desktop']

path = os.path.sep.join(separatedPath)
# C:\\Users\\choglan\\Desktop
print(path)

path = os.path.join(*separatedPath)
# C:Users\\choglan\\Desktop
print(path)

为什么会发生这种情况?即使os.path.join(*list)似乎更常用,我还是应该在我的程序中使用os.path.sep.join(list)吗?

os.path.join
并不是path.split(os.path.sep)的反义词。如果您阅读了,您会发现一个更复杂的过程的描述,而不仅仅是在参数之间粘贴
os.path.sep
。最相关的部分如下:

在Windows上。。。请注意,由于每个驱动器都有一个当前目录,
os.path.join(“c:,“foo”)
表示相对于驱动器
c:
c:foo
)上当前目录的路径,而不是
c:\foo


您可能应该使用
pathlib.PurePath(path.parts)
而不是
path.split(os.path.sep)
os.path.sep
不是一个具有自己方法的独立对象,它是一个字符串。因此,上面的
join
方法只是将字符串粘贴在一起,并在字符串之间插入该字符

>>> type(os.path.sep)
<class 'str'>

这似乎是Windows的问题,因为当我在Ubuntu中运行这段代码时,它没有问题,而且两条路径都是相同的
>>> '|'.join(separatedPath)
'C:|Users|choglan|Desktop'