在windows和linux上分割一个简单的特定路径。

问题描述 投票:0回答:1

问题:我在下面的情况下,在Windows和Linux上有不同的行为。

在以下情况下,我在Windows和Linux上有不同的行为。

import os
path = '..\\file.hdf'
norm_path = os.path.normpath(path)
splitted_path = os.path.split(norm_path)
print(splitted_path)

行为:在以下情况下,我在Windows和Linux上有不同的行为。

在Windows上,我得到 ('', 'file.hdf')

在Linux上,我得到 ('', '..\\file.hdf')

问题

有没有更好的方法来使用 os.path?

解决办法

好吧,很容易用 norm_path.split('\\')但这根本不是动态的。

python linux windows
1个回答
2
投票

在 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)

1
投票

在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

1
投票

替换 \\/

窗口可以处理 / 作为路径分隔符。

Linux不能处理 \\

所以使用 / 任何你想在Linux和Windows上运行的代码。

或者用真正干净的方式,使用 os.sep 正如@snibbets所建议的那样。

在这种情况下,我会使用 os.sep.join('..', 'file.hdf')

© www.soinside.com 2019 - 2024. All rights reserved.