【发布时间】:2018-08-22 02:16:18
【问题描述】:
我不明白os.path.split 在做什么。我正在调试一个程序(特别是 git 与 Perforce 的接口:git-p4)并看到 os.path.split 正在以脚本不期望的方式分割传入路径,并且似乎与文档不一致。我做了一些更简单的测试,但自己无法弄清楚它在做什么。
我要拆分的路径是//a/b(该路径实际上是Perforce路径,而不是本地文件系统路径),我需要在返回对的后半部分使用b。我在 Windows 上运行,并且怀疑这个问题与看起来不太像 Windows 的路径有关。当我尝试在在线沙盒中运行我的测试代码时,它与我的 Windows 机器不同,它按预期运行。
我已阅读文档:
os.path.split(路径)
将路径名路径分成一对,(head, tail),其中 tail 是最后一个路径名组件,而 head 是导致该路径的所有内容。尾部永远不会包含斜线;如果路径以斜线结尾,则尾部将为空。如果路径中没有斜线,head 将为空。如果 path 为空,则 head 和 tail 都为空。尾部的斜线被从头部去除,除非它是根(一个或多个斜线)。在所有情况下,join(head, tail) 返回与 path 相同位置的路径(但字符串可能不同)。另请参阅函数 dirname() 和 basename()。
我的测试代码:
import os
print os.path.split("//a")
print os.path.split("//a/b")
print os.path.split("//a/b/c")
我的期望:
('//', 'a')
('//a', 'b')
('//a/b', 'c')
我实际上在几个在线沙盒上得到了什么:
('//', 'a')
('//a', 'b')
('//a/b', 'c')
我在 PC 上实际得到的结果:
('//', 'a')
('//a/b', '')
('//a/b/', 'c')
Python 2,因为 git-p4 代码是为 Python 2 编写的。
所以我的第一个问题只是为了我自己的理解。这里出了什么问题?操作系统差异?
然后超出我自己的好奇心,我需要修复。我已经能够修改 git-p4,但我当然更愿意尽可能少地编辑它,因为我不想理解它!我不是蟒蛇专家。有没有类似的方法可以返回('//a', 'b')?
【问题讨论】:
-
后续:由于最初的 bug 不是在我的代码中而是在 git-p4 中发现的,因此该解决方案是否足够跨平台,值得推荐给 git 开发?
-
在我的 Ubtu 盒子上,Python3 和 Python2 都会返回你所期望的,而在我的 赢机器你得到什么。