用os.path.join()构造绝对路径
我想在python中构造一个绝对路径,而与此同时却对诸如路径分隔符之类的东西一无所知。
例如,在我的文件系统的根目录上/etc/init.d
(或C:\etc\init.d
在w32上)有一个目录,而我只想根据这些元素来构造该目录,etc
并且init.d
(在w32上,我可能还需要一个磁盘ID,例如C:
)
为了不必担心路径分隔符,os.join.path()
显然是首选工具。但这似乎只会创建 相对 路径:
print "MYPATH:", os.path.join('etc', 'init.d') MYPATH: etc/init.d
添加虚拟的第一元素(例如''
)没有任何帮助:
print "MYPATH:", os.path.join('', 'etc', 'init.d') MYPATH: etc/init.d
将第一个元素设为绝对显然会有所帮助,但是这种做法失败了使用 os.path.join()
print "MYPATH:", os.path.join('/etc', 'init.d') MYPATH: /etc/init.d
usingos.path.abspath()
只会尝试将相对路径转换为绝对路径。例如,考虑在工作目录中运行以下命令/home/foo
:
print "MYPATH:", os.path.abspath(os.path.join('etc', 'init.d')) MYPATH: /home/foo/etc/init.d
那么,“扎根”路径的标准跨平台方法是什么?
root = ??? # <-- print "MYPATH:", os.path.join(root, 'etc', 'init.d')
MYPATH: /etc/init.d
问题的实质归结为:由于前导斜线/etc/init.d
使该路径成为绝对路径,是否有办法以编程方式构造该前导斜线?(我不想假设斜杠表示绝对路径)
回答:
所以我想出的解决方案是通过将给定文件跟随到根目录来构建文件系统的根目录:
def getRoot(file=None): if file is None:
file='.'
me=os.path.abspath(file)
drive,path=os.path.splitdrive(me)
while 1:
path,folder=os.path.split(path)
if not folder:
break
return drive+path
os.path.join(getRoot(), 'etc', 'init.d')
以上是 用os.path.join()构造绝对路径 的全部内容, 来源链接: utcz.com/qa/404145.html