1

我有这个代码片段

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 网络名称/反斜杠相关的任何内容。

4

1 回答 1

3

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

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

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

import ntpath
result = ntpath.dirname(path)

os.path请参阅模块文档的顶部:

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

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

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

于 2014-11-19T17:32:15.163 回答