如何在 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/B
和A/foo/../B
和A/./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 上)。但是我可以通过join
和normpath
的正确组合得到预期的结果,例如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环境下创建虚拟环境详解❤️