使用Windows网络路径时,python os.path.dirname会产生错误的结果

时间:2014-11-19 17:25:46

标签: python string windows dirname

我已经获得了此代码段

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理智"作品和简单的名字不是吗?我无法找到与Windows网络名称/反斜杠相关的任何内容。

1 个答案:

答案 0 :(得分:3)

您很可能不会在Windows上运行此功能。除了实际的Windows环境之外,该行为与使用os.path模块完全一致。

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

如果要在Mac OS X或Linux等POSIX OS上从Windows路径中拆分dirnames,则需要导入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。