新手会踩的坑--os.path.abspath用法

os.path.abspath用法

当你想取指定文件或目录的绝对路径(完整路径),想起OS模块不是有个取文件绝对路径的方法os.path.abspath(),马上拿来用!
例:获取文件‘test.py’的完整路径
在这里插入图片描述
test.py的完整路径是:D:\python_t\IO目录处理\test.py
看到结果就泪奔了,不是取绝对路径么怎么不是真实的完整路径上级目录不见了? 很多疑问。

再来看看例子:
在这里插入图片描述
例中:第1个打印的结果,就是我想要的。 但是这个是取当前文件的绝对路径(完整路径),不是我想要的,并且实际应用中也并非都是取当前文件而是要取指定文件或文件夹(目录)的绝对路径。

上述几个例子,有点明白了os.path.abspath无法获取指定文件的绝对路径,而是需要加文件路径os.path.abspath(path)。但是还是有点迷,这是咋回事?为了更好的理解,接下来看看os.path.abspath源码解读,就会彻底解迷了。

os.path.abspath源码解读:

try:
from nt import _getfullpathname  #nt是提供访问windows操作系统的接口.
except ImportError: # not running on Windows - mock up something sensible  如果导入失败
    def abspath(path):
        """Return the absolute version of a path."""
        if not isabs(path):  #如果不是绝对路径
            if isinstance(path, unicode):#判断编码类型是不是unicode
                cwd = os.getcwdu()  #是用getcwdu
            else:
                cwd = os.getcwd()  #不是用getcwd
            path = join(cwd, path) #把path和当前工作路径连接起来.
        return normpath(path)

else:  # use native Windows method on Windows
    def abspath(path):
        """Return the absolute version of a path."""

        if path: # Empty path must return current working directory.
            try:
                path = _getfullpathname(path)
            except WindowsError:
                pass # Bad path - return unchanged.
        elif isinstance(path, _unicode):
            path = os.getcwdu()
        else:
            path = os.getcwd()
        return normpath(path)

结论:os.path.abspath取决于os.getcwd,如果是一个绝对路径,就返回,如果不是绝对路径,根据编码执行getcwd/getcwdu.然后把path和当前工作路径连接起来.

参考来源:https://blog.csdn.net/funnypython/article/details/78733115

  • 47
    点赞
  • 151
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值