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.youkuaiyun.com/funnyPython/article/details/78733115
https://blog.youkuaiyun.com/yes1cpp/article/details/43310595