将Windows路径转换为Posix路径。

14

我在我的Python项目中使用Path类和pathlib来管理路径。

在Linux系统上一切正常,但是在Windows上遇到了一些问题。

在代码的某个地方,我需要编写一个JavaScript文件,列出对几个其他文件的引用。这些路径必须以POSIX格式编写。但是,当我在Windows上执行str(my_path_instance)时,该路径会以Windows格式编写。

你知道使用pathlibWindowsPath转换为PosixPath的简单方法吗?

2个回答

27

pathlib有一个as_posix方法,可将Windows路径转换为POSIX路径:

pathlib.path(r'foo\bar').as_posix()

除此之外,您可以通过调用适当的构造函数来通常构建特定于系统的路径。文档指出:

当在Unix上运行时,无法实例化WindowsPath,但可以实例化PureWindowsPath [或反之]。

因此,请使用Pure*类的构造函数:

str(pathlib.PurePosixPath(your_posix_path))
然而,如果your_posix_path包含反斜杠,则此方法无法实现您的目标,因为\(Windows路径分隔符)在POSIX中被视为普通字符。因此,a\b是有效的POSIX文件名,不是表示目录b中文件b的路径,并且PurePosixPath将保留此解释。
>>> str(pathlib.PurePosixPath(r'a\b'))
'a\\b'

要将Windows路径转换为POSIX路径,请使用PureWindowsPath类,并通过as_posix进行转换:

>>> pathlib.PureWindowsPath(r'a\b').as_posix()
'a/b'

@graille 奇怪,对我来说它是有效的(反过来;我在macOS上),而且它应该有效。话虽如此,请参见更新。有一种更直接的方法。 - Konrad Rudolph
as_posix 是此处正确的方法。我可以验证 str(PurePosixPath("some\\path\\on\Windows")) 仍然使用反斜杠。 - Adam Smith
1
@AdamSmith 那一定是pathlib中的一个bug。在macOS上,我得到了预期的结果str(PureWindowsPath(Path('foo/bar'))) == 'foo\\bar',这确实是文档化的行为(尽管文档没有明确提到__str__dunder方法,但是Path.__str__的文档注释确实指定了这种行为)。 - Konrad Rudolph
@KonradRudolph 我倾向于同意! - Adam Smith
笔误:pathlib.path 应为 pathlib.Path - BSalita
显示剩余4条评论

3

如果你想在Unix机器上操作Windows路径(或者反之亦然),你需要使用Python的pathlib。在Unix上运行时,你不能实例化一个WindowsPath对象,但是你可以实例化PureWindowsPath/PurePosixPath对象。

.

enter image description here


我不明白,请您能否详细解释一下? - Ayush
我正在查看 tensorflow 存储库源代码,我发现这个语句 os.path.abspath(path).replace('\\', '/'),这是唯一的语句,它是一个单行函数,用于将 posix 路径转换为 windows 路径。现在我有点困惑,不知道这个语句如何返回有效的 windows 路径。 - Ayush
1
Windows在NT API中接受“/”作为有效路径,但在旧的Win32 API中不接受,因此这取决于消费这些路径的应用程序是如何制作的。 - Luiz Felipe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接