我应该使用哪一个:os.sep 还是 os.path.sep?

Posted

技术标签:

【中文标题】我应该使用哪一个:os.sep 还是 os.path.sep?【英文标题】:which one should I use: os.sep or os.path.sep? 【发布时间】:2011-10-17 13:11:00 【问题描述】:

它们是相同的,但我应该使用哪一个?

http://docs.python.org/library/os.html:

os.sep

操作系统用来分隔路径名组件的字符。这是 '/' 用于 POSIX 和 '\' 用于 Windows。请注意,知道这一点并不足以解析或连接路径名——使用 os.path.split() 和 os.path.join()——但它有时很有用。也可以通过 os.path 获得。

【问题讨论】:

它们并不总是相同的。例如,在 Mac OS X 上,os.sep 返回/,但os.pathsep 返回: @jvriesem os.pathsep 应该不同于 os.path.sepos.sep。请参阅os.pathsep 与 os.sep 只是为了让像我一样可能误读 jvriesem 和 JETM 的 cmets 的读者明白这一点。 os.sepos.path.sep 在任何操作系统上的值都是一致的,os.pathsep(路径和 sep 之间没有点)是 completely different。 【参考方案1】:

以下示例可以突出 os.path.join 和 os.path.sep.join 之间的区别。

>>> import os
>>> os.path.join("output", "images", "saved")
'output/images/saved'
>>> os.path.sep.join(["output", "images", "saved"])
'output/images/saved'

我猜 os.path.sep.join 更健壮,可以在不修改任何操作系统的情况下使用。

【讨论】:

这似乎是os.path.sep 类的实际用途。【参考方案2】:

如果您使用的是 Python 2.7,我建议使用 os.sep(有效)而不是 os.path.sep(已损坏),因为 Windows 上的 Jython 存在返回 "/" 斜杠而不是所需的 "\" 反斜杠的错误。

【讨论】:

【参考方案3】:

我会使用os.path.sep 来明确表示它是路径分隔符……但一致性更重要,所以如果已经在使用它,请使用它。否则,请选择一个并一直使用它。

编辑:不过,为了确保您没有重新发明***,path 模块已经具有 joinsplitdirnamebasename 函数…所以你应该很少需要使用path.sep

>>> os.path.join("foo", "bar", "baz")
'foo/bar/baz'
>>> os.path.split(_)
('foo/bar', 'baz')

【讨论】:

文档似乎只记录了os.sep,而且使用os.sep的地方似乎比os.path.sep多。我同意你的观点, os.path.sep 更清楚。有没有从原设计者的角度考虑我们不知道的地方? 这很奇怪,因为sep 实际上是在path 模块中定义的(嗯,特别是$SYSTEMpath 模块,其中$SYSTEM 是,例如posixnt等),并显式导入os(来自os.py,在加载了正确的操作系统专用“os”和“path”模块后:from os.path import (…, sep, …) 所以,tl;博士:我不确定。如果将path 模块的所有 都导入os 会有意义……但有些部分(例如path.join)不是。 zhigang:您在问题中引用的文档说“也可以通过 os.path 获得。” 是的。我知道了。这是否意味着首选“os.sep”?【参考方案4】:

为了清楚起见,我建议您使用os.path.sep,因为它是路径分隔符,而不是操作系统分隔符。如果你import os.path as path可以叫path.sep,那就更好了。

【讨论】:

我觉得奇怪的是os.path.sep 没有在documentation for os.path 中提及,也没有在3.6-dev docs 中提及。但是os.sep 是。但是,提到了os.path.supports_unicode_filenames(常量/只读/属性)。也许要提交一个错误。 我猜他们故意不记录它以鼓励使用os.sep。不过可能是错的。

以上是关于我应该使用哪一个:os.sep 还是 os.path.sep?的主要内容,如果未能解决你的问题,请参考以下文章

React 还是 Vue: 你应该选择哪一个Web前端框架?

模块04

React 还是 Vue: 你应该选择哪一个Web前端框架?

我应该使用哪种 WPML 字符串翻译方法?

用python读取配置文件config.ini

批量修改扩展名