在以下情况下,我在Windows和Linux上有不同的行为。
import os
path = '..\\file.hdf'
norm_path = os.path.normpath(path)
splitted_path = os.path.split(norm_path)
print(splitted_path)
在Windows上,我得到 ('', 'file.hdf')
在Linux上,我得到 ('', '..\\file.hdf')
有没有更好的方法来使用 os.path?
好吧,很容易用 norm_path.split('\\')
但这根本不是动态的。
在 Linux 上,路径是用前斜线分开的。如果你想要一个独立于平台的方法,我建议使用 os.sep
而不是反斜杠。
import os
path = '..' + os.sep + 'file.hdf'
norm_path = os.path.normpath(path)
split_path = os.path.split(norm_path)
print(split_path)
在Linux系统中 \
不是路径分隔符。因此,您的 ..\\file.hdf
是指 "名为 file.hdf
在当前目录的父目录中",而只是 "一个名为 ..\file.hdf
在Linux上,"在当前目录下"。我建议使用 pathlib
模块而不是 os.path
:
import pathlib
norm_path = pathlib.PureWindowsPath('..\\file.hdf')
split_path = list(norm_path.parts)
# ['..', 'file.hdf'] both on Linux and Windows
替换 \\
与 /
窗口可以处理 /
作为路径分隔符。
Linux不能处理 \\
所以使用 /
任何你想在Linux和Windows上运行的代码。
或者用真正干净的方式,使用 os.sep
正如@snibbets所建议的那样。
在这种情况下,我会使用 os.sep.join('..', 'file.hdf'
)