【问题标题】:python os.path.dirname yields wrong results with windows network pathpython os.path.dirname 使用 windows 网络路径产生错误的结果
【发布时间】:2014-11-19 17:25:46
【问题描述】:

我有这个代码sn-p

print "tmp = ", tmp
print "dirname = ", os.path.dirname(tmp)
print "tmp sane = ", (os.path.dirname(tmp.replace("\\", "/"))).replace("/", "\\")

产生这个结果

tmp =  \\aaaa.aaa\aaaaaaaa\aaaaaaaaa\aaaa\aaaa\aaaaa\aaaaaaa\aaaaaaa\aaaa.aaaaaaaa_aaaaaa\aa\aaaaa\aaaaaa\aaa\aaaaaa\aa\aaaaa\aaaaaaa_aaaaaaaaa_aaa\aaaa_aa.aaa
dirname =
tmp sane =  \\aaaa.aaa\aaaaaaaa\aaaaaaaaa\aaaa\aaaa\aaaaa\aaaaaaa\aaaaaaa\aaaa.aaaaaaaa_aaaaaa\aa\aaaaa\aaaaaa\aaa\aaaaaa\aa\aaaaa\aaaaaaa_aaaaaaaaa_aaa

任何想法为什么“tmp sane”有效而简单的目录名无效?我找不到与 Windows 网络名称/反斜杠相关的任何内容。

【问题讨论】:

  • 您能否使用repr(tmp)repr(os.path.dirname(tmp)) 等向我们展示相同的信息?另外,这是什么平台,你是在 Windows 还是 其他东西 上运行它?
  • windows下是cygwin。 repr(tmp) 打印出 '\\\\aaaa.aaa\\aaaaaaaa\\aaaaaaaaa\\aaaa\\aaaa\\aaaaa\\aaaaaaa\\aaaaaaa\\aaaa.aaaaaaaa_aaaaaa\\aa\\aaaaa\\aaaaaa\\aaa\\aaaaaa\\aa\\aaaaa\\aaaaaaa_aaaaaaaaa_aaa\\aaaa_aa.aaa'
  • Cygwin 是一个 POSIX 实现,所以 os.path == posixpath.

标签: python string windows dirname


【解决方案1】:

您很可能不在 Windows 上运行它。该行为与在除实际 Windows 环境之外的任何环境中使用 os.path 模块完全一致。

os.path 调整行为以匹配当前平台。在 Windows 上,正斜杠和反斜杠都受支持,但在 Linux 和 Mac 上,只能识别正斜杠。这与您运行代码的平台上使用的实际约定相匹配。

如果您想在 POSIX 操作系统(如 Mac OS X 或 Linux)上从 Windows 路径中拆分目录名,则需要导入 ntpath 模块;该模块是在 Windows 上真正使用的,但在其他平台上仍然可用:

import ntpath
result = ntpath.dirname(path)

见顶os.path module documentation

注意:由于不同的操作系统有不同的路径名约定,标准库中有这个模块的几个版本。 os.path 模块始终是适用于 Python 运行的操作系统的路径模块,因此可用于本地路径。但是,如果您想以一种不同的格式操作始终的路径,您也可以导入和使用各个模块。它们都有相同的界面:

  • posixpath 用于 UNIX 样式的路径
  • ntpath 用于 Windows 路径
  • macpath 用于旧式 MacOS 路径
  • os2emxpath 用于 OS/2 EMX 路径

在这种情况下,Cygwin 被视为 POSIX 环境,而不是 Windows。

【讨论】:

    猜你喜欢
    • 2016-07-24
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    相关资源
    最近更新 更多