【问题标题】:Python os.path.dirname("path") bug - does not return parent directory when path terminated by "/"Python os.path.dirname("path") 错误 - 当路径以“/”终止时不返回父目录
【发布时间】:2019-02-06 04:51:46
【问题描述】:

在某些情况下,目录路径将被终止 用“/”字符表示路径 question是一个目录而不是一个文件。

os.path.dirname 函数应该返回 父目录名称,但当出现“/”时 在路径字符串的末尾是目录本身 而不是返回父目录。

示例:

>>> os.path.dirname("/a/b/c/d/e/f")
'/a/b/c/d/e'                       <----- correct

>>> os.path.dirname("/a/b/c/d/e/f/")
'/a/b/c/d/e/f'     <-----------------should be '/a/b/c/d/e'

似乎需要对“/”字符进行测试 像这样:

如果 s[-1] == "/": s=s[:-1]

这个函数的行为方式是否有原因, 或者这是一个实际的错误?如果这是一个错误,我该如何归档 它或有​​人可以提交这个吗?

【问题讨论】:

  • 也许你可以在获取目录名之前执行 "/a/b/c/d/e/f/".rstrip("/")。
  • 谢谢,这是另一种方法 - 如果 s[-1] == "/": s=s[:-1] 。此函数的帮助文档措辞不准确,因为它说的是“目录名称”,但它确实应该说“父目录”名称,因为它不知道或不检查它所传递的内容,它只是盲目地将字符串视为路径, 和 UNIX 的“dirname”命令一样。结尾的“/”字符只能表示一件事,即左侧的字符串表示目录而不是文件,因此返回该字符串的“目录组件”实际上将返回文件名本身。

标签: python operating-system os.path dirname


【解决方案1】:

实际上,os.path.dirname 根本不应该返回父目录名称。来自python docs

os.path.dirname(路径)

返回路径名路径的目录名。这 是通过将路径传递给返回的对的第一个元素 函数拆分()。

或者你可以只使用内置的帮助功能:

>>> import os
>>> help(os.path.dirname)
Help on function dirname in module ntpath:

dirname(p)
    Returns the directory component of a pathname

基本上它看起来像给定一个路径,dirname 试图找到它的目录组件。对于文件,当然这意味着它所在的目录,但对于目录,返回目录本身对我来说似乎是合乎逻辑的。

【讨论】:

  • 文档不精确,因为没有进行文件类型检查,函数不会验证它所传递的内容或返回的内容,正如我的实际示例所证明的那样。该函数正在使用字符串,并且在执行此操作时词法错误。如果它表现得像帮助暗示它会吐出以“/”字符结尾的路径,因为那是不确定的。一致性将表现为 UNIX 目录名注释......即 $ dirname "pwd/" /Volumes/home/username
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多