在 Mac 和 Windows 中运行时,Python path.join 行为不同

Ven*_*esh 1 python parsing operating-system python-2.7

我希望我的 PYTHON 项目能够在任何终端(MAC、CYGWIN、Windows 等)中支持 Windows Linux MAC。我可以实现,但是当我运行以下命令时遇到了一些问题

import os
mypath = os.path.join('users','scripts', 'pythonsample')
print mypath
Run Code Online (Sandbox Code Playgroud)

在 Windows 命令提示符输出是

users\scripts\pythonsample
Run Code Online (Sandbox Code Playgroud)

在 MAC 终端输出是

users/scripts/pythonsample
Run Code Online (Sandbox Code Playgroud)

另外,当我运行以下代码时

import glob
glob.glob(os.path.join('users','scripts', 'pythonsample','*.*'))
Run Code Online (Sandbox Code Playgroud)

在 Windows 命令提示符输出是

[users/scripts\\pythonsample\\a1.py,
users/scripts\\pythonsample\\a2.py,
users/scripts\\pythonsample\\a3.py
users/scripts\\pythonsample\\a4.py]
Run Code Online (Sandbox Code Playgroud)

在 MAC 终端输出是

[users/scripts/pythonsample/a1.py,
users/scripts/pythonsample/a2.py,
users/scripts/pythonsample/a3.py
users/scripts/pythonsample/a4.py]
Run Code Online (Sandbox Code Playgroud)

因此,在多个平台中解析并获取没有完整路径的文件名变得困难。

我可以编写一个 if else 块来决定脚本是在 Windows、MAC 还是 CGYWIN 中运行。

import sys
#Output of below command is Win32, linux2, darwin, cgywin 
print(sys.platform)
Run Code Online (Sandbox Code Playgroud)

但是有没有一种简单的方法来完成这个而不用 if else 块?

aba*_*ert 5

这正是您应该期待的。在 Windows 上,os.path为您提供 Windows 风格的路径;在 Mac OS X 上,它为您提供 POSIX 风格的路径。

如果您希望保证 POSIX 路径的所有内容,请不要使用os.pathposixpath而是使用。

另一方面,如果您有甚至在 Windows 上可能是 POSIX 格式的路径(因为 Windows 的大多数部分都处理 POSIX 样式的路径,并且许多工具生成 POSIX 样式的路径)并且想要保证您有本地路径,调用os.path.normpath.

  • 如果你愿意,你可以随时使用 `s.split(os.pathsep)`,它会在 Windows 上的反斜杠和其他地方的斜杠上拆分。但是`os.path` 的全部意义在于你不必处理这些废话。只需使用 `os.path` 中的方法来处理路径。 (3认同)
  • @Venkatesh:抱歉,是的,我的意思是“os.sep”。感谢指正;否则很容易让未来的读者感到困惑! (2认同)