如何找到目标文件&x27;s python中符号链接或软链接的完整(绝对路径)
当我给 ls-l/etc/font/conf.d/70-yes-bitmaps.conf如何找到目标文件&x27;s python中符号链接或软链接的完整(绝对路径),python,linux,absolute-path,symlink,Python,Linux,Absolute Path,Symlink,当我给 ls-l/etc/font/conf.d/70-yes-bitmaps.conf lrwxrwxrwx <snip> /etc/fonts/conf.d/70-yes-bitmaps.conf -> ../conf.avail/70-yes-bitmaps.conf lrwxrwx/etc/font/conf.d/70-yes-bitmaps.conf->../conf.avail/70-yes-bitmaps.conf 对于符号链接或软链接,如何在python中找
lrwxrwxrwx <snip> /etc/fonts/conf.d/70-yes-bitmaps.conf -> ../conf.avail/70-yes-bitmaps.conf
lrwxrwx/etc/font/conf.d/70-yes-bitmaps.conf->../conf.avail/70-yes-bitmaps.conf
对于符号链接或软链接,如何在python中找到目标文件的完整(绝对路径)
如果我使用
os.readlink('/etc/font/conf.d/70 yes bitmaps.conf')
它输出
。/conf.avail/70是位图.conf
但我需要的是绝对路径而不是相对路径,所以我想要的输出必须是
/etc/font/conf.avail/70是位图.conf
如何用符号链接或软链接文件的父目录的实际完整路径替换。
。
另外还有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')
)
)
返回指定文件名的规范路径,消除路径中遇到的任何符号链接。正如unutbu所说,
os.path.realpath(path)
应该是正确答案,返回指定文件名的规范路径,解析指向其目标的任何符号链接。但它在窗户下坏了
我已经为Python 3.2创建了一个修补程序来修复此错误,并将其上载到:
它修复了Python32\Lib\ntpath.py中的realpath()
函数
我还将其放在我的服务器上,如下所示:
不幸的是,Python2.x中也存在该缺陷,我知道没有修复该缺陷的方法。声明使用os.path.join()
:
结果可以是绝对路径名或相对路径名;如果它是相对的,则可以使用os.path.join(os.path.dirname(path),result)
将其转换为绝对路径名
在Windows10上,Python3.5,os.readlink(“C:\\Users\PP”)
其中“C:\Users\PP”是一个符号链接(不是连接链接)
它返回目录的绝对路径
这也适用于Ubuntu 16.04和python 3.5。我建议使用库进行文件系统操作
import pathlib
x = pathlib.Path('lol/lol/path')
x.resolve()
文档用于路径。解析(strict=False)
:将路径设置为绝对路径,解析任何符号链接。返回一个新的path对象。os.path.realpath不会消除Windows 7下Python 3.2中的符号链接。(虫子?)嗯。。。我发现这是一个已经存在了1.5年的开放性bug:是的,3年后也遇到了同样的问题:cin Python3,如果您使用的是Path
对象,那么您可以通过执行Path.resolve()
在Python 3.8中修复Windows问题:“在版本3.8中更改:符号链接和连接现在在Windows上得到解决。”但是要注意:如果您将一个非符号链接的路径传递给readlink,它会很生气,并给出以下异常:OSError:[Errno 22]无效参数:“您的路径”
os。readlink
应该可以在ubuntu/windows、python 3.5上运行。刚刚测试过:os.path.abspath
?不需要,@dmitry\u romanov。如果您只调用了os.path.abspath(result)
,它将不知道路径应该从哪里开始。这就是为什么需要传入path
。如果result
已经是绝对路径,则join
是智能的。文档中写道:“如果组件是绝对路径,那么之前的所有组件都将被丢弃,并从绝对路径组件继续连接。”
import pathlib
x = pathlib.Path('lol/lol/path')
x.resolve()