python - os.path.split 似乎返回错误

标签 python windows git-p4

我不明白 os.path.split 是做什么的。我正在调试一个程序(特别是 git 与 Perforce 的接口(interface):git-p4)并看到 os.path.split 正在以脚本未预期的方式拆分传入路径,而且看起来也不一致与文档。我做了一些更简单的测试,但我自己无法弄清楚它在做什么。

我要拆分的路径是//a/b(该路径其实是Perforce路径,不是本地文件系统路径),我需要b在返回对的后半部分。我在 Windows 上运行,怀疑这个问题与看起来不太像 Windows 的路径有关。当我尝试在在线沙箱中运行我的测试代码时,它按预期运行,这与我的 Windows 机器不同。

我已阅读文档:

os.path.split(路径)

Split the pathname path into a pair, (head, tail) where tail is the last pathname component and head is everything leading up to that. The tail part will never contain a slash; if path ends in a slash, tail will be empty. If there is no slash in path, head will be empty. If path is empty, both head and tail are empty. Trailing slashes are stripped from head unless it is the root (one or more slashes only). In all cases, join(head, tail) returns a path to the same location as path (but the strings may differ). Also see the functions dirname() and 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,但我当然更愿意尽可能少地编辑它,因为我不想理解它!我不是 python 专家。是否有类似的方法可以返回 ('//a', 'b')

最佳答案

您使用了错误的工具来处理这些路径。在 Windows 上,以 //foo/bar\\foo\bar 开头的路径被视为 UNC network paths , os.path.split() 将首先使用 os.path.splitdrive()以确保 UNC 部分未拆分。 UNC 或驱动器部分在拆分其余部分后重新连接。

您可以使用 posixpath 模块来获取 POSIX 行为:

import posixpath

posixpath.split(yourpaths)

引自top of the os.path module documentation :

Note: Since different operating systems have different path name conventions, there are several versions of this module in the standard library. The os.path module is always the path module suitable for the operating system Python is running on, and therefore usable for local paths. However, you can also import and use the individual modules if you want to manipulate a path that is always in one of the different formats. They all have the same interface:

  • posixpath for UNIX-style paths
  • ntpath for Windows paths
  • [...]

在Windows上,os.pathntpath是同一个模块,在线沙盒肯定都是POSIX系统。

只要您始终使用正斜杠作为路径分隔符,就可以将您的 Perforce 路径视为 POSIX 路径。

关于python - os.path.split 似乎返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49262700/

相关文章:

python - Cygwin下的Git P4 : Submit fails with "Patch does not apply"

python 类属性到 pandas 数据框

python - 使用 lxml xml 模式验证打印回溯

python - 每次我运行 `pip` 来安装任何软件包时,它都会向我显示警告

.net - 确定正在运行的应用程序中的 .net 框架版本

git-p4 - 致命 : Unsupported command: Users. 引用 "KPLUS"

git - 使用分支命名空间有效地备份多个版本的 git repo

python - 当 AWS::CustomResource 具有列表类型输出时如何获取选择性项目

python - 如何根据请求切换小部件可见性

Java访问Window的 "Open with..."列表