当我给予 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中找到目标文件的完整(绝对路径),
如果我使用
os.readlink('/etc/fonts/conf.d/70-yes-bitmaps.conf')
输出
../conf.avail/70-yes-bitmaps.conf
但是我需要绝对路径而不是相对路径,所以我想要的输出必须是,
/etc/fonts/conf.avail/70-yes-bitmaps.conf
如何将..
替换为符号链接或软链接文件的父目录的实际完整路径。
答案 0 :(得分:101)
os.path.realpath(path)
os.path.realpath返回指定文件名的规范路径,消除路径中遇到的任何符号链接。
答案 1 :(得分:13)
正如unutbu所说,os.path.realpath(path)
应该是正确的答案,返回指定文件名的规范路径,解析指向其目标的任何符号链接。但它在Windows下被打破了。
我已经为Python 3.2创建了一个修补程序以修复此错误,并将其上传到:
http://bugs.python.org/issue9949
它修复了realpath()
Python32\Lib\ntpath.py
功能
我也把它放在我的服务器上,这里:
http://www.burtonsys.com/ntpath_fix_issue9949.zip
不幸的是,这个bug也存在于Python 2.x中,我知道它没有修复它。
答案 2 :(得分:8)
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')
)
)
答案 3 :(得分:0)
documentation说使用os.path.join()
:
结果可以是绝对路径名或相对路径名;如果它是相对的,则可以使用
os.path.join(os.path.dirname(path), result)
将其转换为绝对路径名。
答案 4 :(得分:0)
在Windows 10上,python 3.5,os.readlink("C:\\Users\PP")
其中“C:\ Users \ PP”是符号链接(不是联结链接)。
返回目录的绝对路径。
这适用于Ubuntu 16.04,python 3.5。
答案 5 :(得分:0)
我建议使用pathlib
库进行文件系统操作。
import pathlib
x = pathlib.Path('lol/lol/path')
x.resolve()
Path.resolve(strict=False)
的文档:将路径设为绝对路径,解决所有符号链接。返回一个新的路径对象。