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



我正在开发一个需要拆分和重新加入一些文件路径的程序,我不确定为什么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.sep.join(list(,即使 os.path.join(*list( 似乎更常用?

os.path.join

并不打算成为path.split(os.path.sep)的反面。如果您阅读文档,您会发现一个更复杂的过程的描述,而不仅仅是在参数之间粘os.path.sep。最相关的部分如下:

在窗户上...请注意,由于每个驱动器都有一个当前目录,因此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'>

可以使用任何字符串中的join

>>> '|'.join(separatedPath)
'C:|Users|choglan|Desktop'

最新更新