如何在 Python 中的 Linux 和 Windows 中使用“/”(目录分隔符)?

Posted

技术标签:

【中文标题】如何在 Python 中的 Linux 和 Windows 中使用“/”(目录分隔符)?【英文标题】:How to use "/" (directory separator) in both Linux and Windows in Python? 【发布时间】:2013-04-07 07:41:07 【问题描述】:

我在 python 中编写了一个代码,它使用 / 在文件夹中创建特定文件,如果我想在 windows 中使用该代码,它将无法工作,有没有办法可以在 windows 中使用代码和Linux。

在 python 中我使用这个代码:

pathfile=os.path.dirname(templateFile)
rootTree.write(''+pathfile+'/output/log.txt')

当我在假设 windows 机器中使用我的代码时,我的代码将无法工作。

如何在 Linux 和 Windows 中使用“/”(目录分隔符)?

【问题讨论】:

您可以在开始时根据 Win/*nix 定义它,然后使用变量。 在 Windows 中,您可以使用 \ 或 / 作为目录分隔符。 Windows 在目录路径中支持/。你有什么具体问题?发布一些说明问题的代码。 除非您依赖于 Windows 用户空间程序,否则正斜杠和反斜杠一样有效。然而,一些 cmd 命令有问题。 @Mehrdad:您知道 Win32 API 不接受“/”的示例吗? (不算cmd.exe等程序) 【参考方案1】:

执行import os,然后使用os.sep

【讨论】:

【参考方案2】:

一些对您有帮助的有用链接:

os.sep os.path os.pathsep

【讨论】:

pathsep?通常有用,但在 IMO 中没有。 @glglgl 确实。我找了sep,但我也忍不住发布了这个(我认为 OP 会发现它对未来的工作很有用):) @Maroun os.pathsep 是一个分号:;。建议编辑删除。【参考方案3】:

你可以使用os.sep:

>>> import os
>>> os.sep
'/'

【讨论】:

【参考方案4】:

用途:

import os
print os.sep

查看分隔符在当前操作系统上的外观。 在您的代码中,您可以使用:

import os
path = os.path.join('folder_name', 'file_name')

【讨论】:

【参考方案5】:

使用os.path.join()。 示例:os.path.join(pathfile,"output","log.txt")

在您的代码中:rootTree.write(os.path.join(pathfile,"output","log.txt"))

【讨论】:

os.path.join 使用更复杂的逻辑将多个相对路径组件匹配在一起。当您只想链接它们时,os.sep.join 是正确的选择。【参考方案6】:

不要自己建立目录和文件名,使用 python 包含的库。

在这种情况下,相关的是os.path。特别是 join 从目录和文件名或目录创建新路径名,并从完整路径获取文件名的 split。

你的例子是

pathfile=os.path.dirname(templateFile)
p = os.path.join(pathfile, 'output')
p = os.path.join( p, 'log.txt')
rootTree.write(p)

【讨论】:

【参考方案7】:

os.path.normpath(pathname) 也应该被提及,因为它在 Windows 上将 / 路径分隔符转换为 \ 分隔符。它还会折叠冗余的上层引用...即A/BA/foo/../BA/./B 都变成A/B。如果你是 Windows,这些都变成A\B

【讨论】:

这是 IMO 对“如何在 Linux 和 Windows 中使用“/”(目录分隔符)这一问题的最佳答案。而且它也非常有用——当我需要指定一条长路径时,我宁愿使用os.path.normpath('a/b/c/d/file.ext') 而不是os.path.join('a','b','c','d','file.ext') 我还发现这个答案很有帮助。我正在寻找一种生成具有一致分隔符的路径的方法。著名的os.path.join 只是加入提供的任何内容。例如join("a/b", "c\d") 提供 a/b\c\d(在 Windows 上)。但是我可以通过joinnormpath 的正确组合得到预期的结果,例如a\b\c\d(在 Windows 上) 我使用这个导入:from os.path import normpath as normpath # Given a Windows or Linux path, fixes path separators to match the current OS. 然后我可以使用normpath("a/b/c/d/e/f") 之类的东西,这似乎比任何替代品都干净。【参考方案8】:

如果你有幸运行 Python 3.4+,你可以使用pathlib:

from pathlib import Path

path = Path(dir, subdir, filename)  # returns a path of the system's path flavour

或者,等价的,

path = Path(dir) / subdir / filename

【讨论】:

现在是 2020 年,所以现在应该是公认的答案。 Python 开发人员添加它是为了解决os 中的问题,它使一切变得更容易。例如path.read_text(encoding="utf8")path.read_bytes()path.resolve()path.unlink()、...【参考方案9】:

你可以使用“os.sep

 import os
 pathfile=os.path.dirname(templateFile)
 directory = str(pathfile)+os.sep+'output'+os.sep+'log.txt'
 rootTree.write(directory)

【讨论】:

【参考方案10】:

我在大多数情况下使用pathlib,所以我喜欢:pathlib.os.sep

如果您不需要os,通常pathlib 是更好的选择!

【讨论】:

【参考方案11】:

如果有人正在寻找这样的东西::

他/她想知道父目录,然后转到子文件夹,然后可能转到特定文件。如果是这样,我使用以下方法。

    我现在使用的是 python 3.9。所以在那个版本中,我们有 os 模块来处理这些任务。所以,为了获取父目录::
parent_dir = os.path.pardir
    最好不要对文件路径分隔符(/ 或 \)进行硬编码。相反,请使用上述 os 模块提供的操作系统相关机制。它使您的代码非常可重用于其他目的/人。它是这样的(只是一个例子)::

path = os.path.pardir + os.sep + 'utils' + os.sep + 'properties.ini'

print(f'The path to my global properties file is :: path')

输出 ::

..\utils\properties.ini

您当然可以在这里查看整个文档: https://docs.python.org/3/library/os.html

【讨论】:

以上是关于如何在 Python 中的 Linux 和 Windows 中使用“/”(目录分隔符)?的主要内容,如果未能解决你的问题,请参考以下文章

如何管理你下载的一大堆Python包❤️win环境及linux环境下创建虚拟环境详解❤️

如何在linux中模拟

怎么解决linux中的TXT在win7中的排序问题,linux中的换行在win7中不适用了。

python如何安装matplotlib模块

记录下WIN下配置LINUX虚拟机及PYTHON环境

如何在 Python 中的 Linux 和 Windows 中使用“/”(目录分隔符)?