【问题标题】:os.path.join in python returns 'wrong' path?python 中的 os.path.join 返回“错误”路径?
【发布时间】:2013-08-08 12:13:35
【问题描述】:

我有以下来自 ipython 的 python os.path 输出

import os.path as path
path.join("/", "tmp")
Out[4]: '/tmp'
path.join("/", "/tmp")
Out[5]: '/tmp'
path.join("abc/", "/tmp")
Out[6]: '/tmp'
path.join("abc", "/tmp")
Out[7]: '/tmp'
path.join("/abc", "/tmp")
Out[8]: '/tmp'
path.join("def", "tmp")
Out[10]: 'def/tmp'

我发现输出 5、6、7 和 8 违反直觉。有人可以解释一下这种实施是否有具体原因吗?

【问题讨论】:

  • 请注意,没有任何理由将绝对路径作为join 的非第一个参数。 join 旨在根据其组件构建 a 路径。没有路径具有绝对路径作为“子路径”。您希望 join("/", "/tmp") 会发生什么?
  • 有道理!我想这很好地证明了实施的合理性!谢谢!

标签: python os.path


【解决方案1】:

第二个字符串不应以/ 开头;创建一个绝对路径。执行以下操作:

>>> path.join('abc/', 'tmp')
'abc/tmp'

来自 Python 文档:

如果任何组件是绝对路径,则所有先前的组件(在 Windows 上,包括先前的驱动器号,如果有的话)都将被丢弃,并继续加入。

【讨论】:

    【解决方案2】:

    来自os.path.join() documentation

    智能地加入一个或多个路径组件。如果任何组件是绝对路径,则所有先前的组件(在 Windows 上,包括先前的驱动器号,如果有的话)都将被丢弃,并继续加入。

    开头的/ 使/tmp 成为绝对路径。

    如果您想加入多个可能包含前导路径分隔符的路径元素,请先去除它们:

    os.path.join(*(elem.lstrip(os.sep) for elem in elements))
    

    特殊情况的绝对路径使您可以指定相对路径(来自默认父目录)绝对路径,而不必检测您是否具有绝对路径或相对路径在构建最终值时。

    【讨论】:

      猜你喜欢
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多