我在我的Python项目中使用Path
类和pathlib
来管理路径。
在Linux系统上一切正常,但是在Windows上遇到了一些问题。
在代码的某个地方,我需要编写一个JavaScript文件,列出对几个其他文件的引用。这些路径必须以POSIX格式编写。但是,当我在Windows上执行str(my_path_instance)
时,该路径会以Windows格式编写。
你知道使用pathlib
将WindowsPath
转换为PosixPath
的简单方法吗?
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'
os.path.abspath(path).replace('\\', '/')
,这是唯一的语句,它是一个单行函数,用于将 posix
路径转换为 windows
路径。现在我有点困惑,不知道这个语句如何返回有效的 windows
路径。 - Ayush
as_posix
是此处正确的方法。我可以验证str(PurePosixPath("some\\path\\on\Windows"))
仍然使用反斜杠。 - Adam Smithstr(PureWindowsPath(Path('foo/bar'))) == 'foo\\bar'
,这确实是文档化的行为(尽管文档没有明确提到__str__
dunder方法,但是Path.__str__
的文档注释确实指定了这种行为)。 - Konrad Rudolphpathlib.path
应为pathlib.Path
。 - BSalita