【问题标题】:Splitting a simple specific path on windows and linux在 windows 和 linux 上拆分一个简单的特定路径
【发布时间】:2020-06-03 13:45:36
【问题描述】:

问题:

在以下情况下,我对 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('\\') 很容易修复它,但这根本不是动态的。

【问题讨论】:

    标签: python linux windows


    【解决方案1】:

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

    【讨论】:

    • 如果要连接的成员超过两个,您可能会写类似os.sep.join("..", "data", "file.hdf")
    【解决方案2】:

    在 Linux 中,\ 不是路径分隔符。因此,您的 ..\\file.hdf 在 Windows 上表示“当前目录的父目录中名为 file.hdf 的文件”,而在 Linux 上只是“当前目录中名为 ..\file.hdf 的文件”。我建议使用pathlib 模块而不是os.path

    import pathlib
    norm_path = pathlib.PureWindowsPath('..\\file.hdf')
    split_path = list(norm_path.parts)
    # ['..', 'file.hdf'] both on Linux and Windows
    

    【讨论】:

      【解决方案3】:

      \\ 替换为/

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

      Linux 无法处理\\

      因此,对于您希望能够在 Linux 和 Windows 上运行的任何代码,请使用 /

      或者按照@snibbets 的建议,使用os.sep 以非常干净的方式进行操作。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-02
        • 2011-11-30
        • 2011-05-09
        • 1970-01-01
        • 1970-01-01
        • 2014-07-28
        • 2013-07-12
        相关资源
        最近更新 更多