【发布时间】:2016-08-04 04:24:54
【问题描述】:
我在 Windows 上使用 Paramiko 访问远程 SFTP 服务器。我需要对os.path.join、os.path.commonprefix 等远程路径进行一些处理。由于我的主机平台是 Windows,所有路径操作都带有\ 分隔符,但我需要 POSIX 样式的路径。
有没有办法在Windows上使用Python内置的POSIX路径操作?
【问题讨论】:
我在 Windows 上使用 Paramiko 访问远程 SFTP 服务器。我需要对os.path.join、os.path.commonprefix 等远程路径进行一些处理。由于我的主机平台是 Windows,所有路径操作都带有\ 分隔符,但我需要 POSIX 样式的路径。
有没有办法在Windows上使用Python内置的POSIX路径操作?
【问题讨论】:
在我看来,pathlib.PurePosixPath 是正确的选择(phoenix 已经评论过)。
例如:
>>> import pathlib
>>> pathlib.PurePosixPath('a', 'b')
PurePosixPath('a/b')
>>> str(pathlib.PurePosixPath('a', 'b'))
'a/b'
来自相关文档:
class pathlib.PurePosixPath(*pathsegments)
PurePath 的子类,这种路径风格代表非 Windows 文件系统路径:
>>> PurePosixPath('/etc') PurePosixPath('/etc')pathsegments 的指定与 PurePath 类似。
class pathlib.PureWindowsPath(*pathsegments)
PurePath 的子类,这种路径风格代表 Windows 文件系统路径:
>>> PureWindowsPath('c:/Program Files/') PureWindowsPath('c:/Program Files')pathsegments 的指定与 PurePath 类似。
无论您在哪个系统上运行,您都可以实例化所有 这些类,因为它们不提供任何系统操作 来电。
【讨论】:
正如documentation 中指出的那样(第二条注释)
...如果您愿意,您还可以导入和使用各个模块 以不同格式之一操作始终的路径。他们 都有相同的界面:
posixpath用于 UNIX 样式的路径ntpath用于 Windows 路径
因此您可以导入posixpath 并将其用作os.path
>>> import posixpath
>>> posixpath.join
<function join at 0x025C4170>
>>> posixpath.join('a','b')
'a/b'
>>> posixpath.commonprefix
<function commonprefix at 0x00578030>
【讨论】:
pathlib.PurePosixPath。