Python 为什么列表中的os.path.join()和列表中的os.path.sep.join()在功能上不相同?
我正在开发一个需要拆分和重新连接一些文件路径的程序,我不确定当分离的路径中存在驱动器号时,为什么os.path.join(*list)和os.path.sep.join(list)会产生不同的结果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
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'