【问题标题】:Why are os.path.join() on a list and os.path.sep.join() on a list not functionally identical?为什么列表上的 os.path.join() 和列表上的 os.path.sep.join() 在功能上不相同?
【发布时间】:2020-04-10 11:41:36
【问题描述】:

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

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)

【讨论】:

    【解决方案2】:

    os.path.sep 不是一个拥有自己方法的独立对象,它是一个字符串。因此,它上面的join 方法只是将带有该字符的字符串粘贴在一起。

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

    您可以在任何字符串中使用join

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

    【讨论】:

      猜你喜欢
      • 2021-12-21
      • 1970-01-01
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      • 2016-06-28
      • 2016-07-24
      相关资源
      最近更新 更多