如何在Python中find目标文件的完整(绝对path)符号链接或软链接

当我给ls -l /etc/fonts/conf.d/70-yes-bitmaps.conf

lrwxrwxrwx <snip> /etc/fonts/conf.d/70-yes-bitmaps.conf -> ../conf.avail/70-yes-bitmaps.conf 

所以对于一个符号链接或软链接,如何在python中find目标文件的完整path(绝对path)

如果我使用

os.readlink('/etc/fonts/conf.d/70-yes-bitmaps.conf')

它输出

../conf.avail/70-yes-bitmaps.conf

但我需要的绝对path不是相对path,所以我希望的输出必须是,

/etc/fonts/conf.avail/70-yes-bitmaps.conf

如何将符号链接或软链接文件的父目录的实际完整pathreplace为..

 os.path.realpath(path) 

os.path.realpath返回指定文件名的规范path,消除path中遇到的任何符号链接。

正如unutbu所说,os.path.realpath(path)应该是正确的答案,返回指定文件名的规范path,parsing任何符号链接到他们的目标。 但是在Windows下已经坏了。

我为Python 3.2创build了一个补丁来修复这个bug,并将其上传到:

http://bugs.python.org/issue9949

它修复了Python32 \ Lib \ ntpath.py中的实际path函数

我也把它放在我的服务器上,在这里:

ntpath_fix_issue9949.zip

不幸的是,这个错误也出现在Python 2.x中,我知道在那里没有修复。

http://docs.python.org/library/os.path.html#os.path.abspath

还有joinpath和normpath,取决于你是否在当前的工作目录中,或者你在其他地方工作。 normpath可能对你更直接。

更新:

特别:

 os.path.normpath( os.path.join( os.path.dirname( '/etc/fonts/conf.d/70-yes-bitmaps.conf' ), os.readlink('/etc/fonts/conf.d/70-yes-bitmaps.conf') ) ) 

该文件说使用os.path.join()

结果可能是绝对path名或相对path名; 如果它是相对的,则可以使用os.path.join(os.path.dirname(path), result)将其转换为绝对path名。