适用于Python的任何平台的Unix路径?
Python程序中的所有路径都可以使用“ ..”(用于父目录)和/(用于分隔路径组件),并且在 任何平台上都可以 工作吗?
一方面,我从未在文档中看到过这样的主张(我可能已经错过了),并且os和os.path模块确实提供了以平台不可知的方式处理路径的工具(os.pardir,os.path)。加入……),这让我认为他们在这里是有原因的。
另一方面,您可以在StackOverflow上阅读“ ../path/to/file”可在所有平台上使用的信息…
因此,出于可移植性的目的,应始终使用os.pardir,os.path.join和friends还是Unix路径名始终是安全的(取决于可能的字符编码问题)?还是“几乎总是”安全(即在Windows,OS
X和Linux下工作)?
-
“几乎总是安全的”是正确的。您关心的所有平台今天都可以正常工作,我认为它们不会很快改变其惯例。
但是,Python具有很高的可移植性,并且在比常规平台上更多的运行。该
os
模块的原因是为了帮助平台上的事物平滑,但平台确实有不同的要求。是否有充分的理由不使用这些
os
功能?os.pardir
是自我记录的,而".."
不是自我记录的,而os.pardir可能更易于grep这是python 1.6的一些文档,当时Mac在所有方面都还是不同的
Mac,DOS,NT或Posix的OS例程,取决于我们所使用的系统。
这将导出:-来自posix,nt,dos,os2,mac或ce的所有函数,例如unlink,stat等。-os.path是posixpath,ntpath,macpath或dospath的模块之一-
os.name是’
posix’,’nt’,’dos’,’os2’,’mac’或’ce’-os.curdir是代表当前目录的字符串(’。’或’:’)-os.pardir是字符串代表父目录(’..’或’::’)-os.sep是(或最常见的)路径名分隔符(’/’或’:’或’')-os.altsep是备用路径名分隔符(无或’/’)-os.pathsep是$
PATH等中使用的组件分隔符-os.linesep是文本文件中的行分隔符(’‘或’‘或’‘)-os.defpath是默认搜索可执行文件的路径导入和使用“
os”的程序更有可能在不同平台之间移植。当然,然后它们必须仅使用所有平台定义的功能(例如,unlink和opendir),并将所有路径名操作留给os.path(例如,split和join)。