【随笔】os.path.abspath和os.getcwd的区别

import os
import sys

print(os.getcwd())
print(os.path.abspath('test.py'))

执行结果:

根本区别:

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

os.getcwd()

1、os.getcwd(): 
获取当前工作目录,也就是在哪个目录下运行这个程序。

如果使用pycharm的要注意:

pycharm里面默认的工作目录是你项目的工作目录!!!

2、如果我想获取TestDir.py文件所在的目录,怎么办?

使用sys.path[0]

os.path.abspath源码解读

# Return an absolute path.  
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)

1. 首先从nt 模块导入_getfullpathname 。nt 模块提供访问window操作系统的接口,_getfullpathname是win32接口win32API :win32api.GetFullPathName(path),

2.1如果导入不成功,说明程序不是运行在window平台上。重点来了:

if notisabs(path):
    if isinstance(path,unicode):
        cwd = os.getcwdu()
    else:
        cwd = os.getcwd()
    path = join(cwd, path)
return normpath(path)

这段代码中getcwdu() 和getcwd 都是返回当前工作目录CWD,getcwdu()是unicode 编码,getcwd是string类型。 随后的join(cwd,path) ,把path 和当前工作目录连接

path = join(cwd, path)

参考来源:

https://blog.csdn.net/funnyPython/article/details/78733115

https://blog.csdn.net/yes1cpp/article/details/43310595

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值