Eri*_*got 10 python portability path relative-path
Python程序中的所有路径都可以使用".."(对于父目录)和/(用于分隔路径组件),并且仍然可以在平台上运行吗?
一方面,我从未在文档中看到过这样的说法(我可能已经错过了它),os和os.path模块确实提供了以平台无关的方式处理路径的工具(os.pardir,os.path.加入,...),这让我觉得他们在这里是有原因的.
另一方面,您可以在StackOverflow上阅读 "../path/to/file"适用于所有平台......
因此,为了便于携带,是否应始终使用os.pardir,os.path.join和朋友,或者Unix路径名是否始终安全(最多可能出现字符编码问题)?或者"几乎总是"安全(即在Windows,OS X和Linux下工作)?
Jas*_*ker 11
我从未遇到任何使用问题..,尽管使用os.path.abspath将其转换为绝对路径可能是个好主意.其次,我建议尽可能使用os.path.join.在加入路径时有很多极端情况(除了可移植性问题),最好不要担心它们.例如:
>>> '/foo/bar/' + 'qux'
'/foo/bar/qux'
>>> '/foo/bar' + 'qux'
'/foo/barqux'
>>> from os.path import join
>>> join('/foo/bar/', 'qux')
'/foo/bar/qux'
>>> join('/foo/bar', 'qux')
'/foo/bar/qux'
Run Code Online (Sandbox Code Playgroud)
..如果你在一些不起眼的平台上,你可能会遇到使用问题,但我不能说出任何名称(Windows,*nix和OS X都支持这种表示法).
"几乎总是安全的"是对的.您关心的所有平台今天都可能正常运行,我认为他们不会很快改变他们的惯例.
然而,Python非常便携,并且比通常的平台运行得更多.该os模块的原因是为了帮助平滑事物,平台确实有不同的要求.
你有没有充分的理由不使用这些os功能?
os.pardir是自我记录而".."不是,而os.pardir可能更容易grep
这里有一些来自python 1.6的文档,当时Mac仍然与众不同
适用于Mac,DOS,NT或Posix的操作系统例程,具体取决于我们所使用的系统.
这导出: - 来自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是备用路径名separator(无或'/') - os.pathsep是$ PATH等中使用的组件分隔符 - os.linesep是文本文件中的行分隔符(''或''或'') - os.defpath是默认搜索可执行文件的路径
导入和使用"os"的程序更有可能在不同平台之间移植.当然,它们必须只使用由所有平台定义的函数(例如,unlink和opendir),并将所有路径名操作留给os.path(例如,split和join).
| 归档时间: |
|
| 查看次数: |
4839 次 |
| 最近记录: |