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

问题描述 投票:1回答:1

我正在开发一个需要拆分并重新加入一些文件路径的程序,但我不确定为什么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)吗?

python python-3.x os.path
1个回答
1
投票

os.path.join并非是path.split(os.path.sep)的倒数。如果您阅读docs,您将发现比仅在参数之间插入os.path.sep更复杂的过程的描述。最相关的部分如下:

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

您可能应该使用pathlib.PurePath(path).parts而不是path.split(os.path.sep)

© www.soinside.com 2019 - 2024. All rights reserved.