python基础: os.path.realpath()、os.path.getcwd()、 os.path.abspath() 的区别

目录

 

 

前言

一、realpath、getcwd、abspath各是干嘛的?

二、常用应用场景


前言

在写代码过程中,经常会遇到 realpath、getcwd、abspath。但是对于他们的区别就傻傻分不清楚,对于他们应该在什么场景就更是不知道了。今天特别记录一下,今后有据可依。

 

一、realpath、getcwd、abspath各是干嘛的?

  • realpath    1、获取代码所在的脚本文件的绝对路径(用的多)  2、获取当前应用的真实路径,而非软连接路径(用得少)
  • abspath    返回一个目录的绝对路径
  • getcwd     获取当前的工作目录

1、首先我们需要区分,当前工作目录和绝对路径的区别,也就可以把getcwd和其他两个方法的区别分开。

我们知道代码在执行过程中,都会默认使用当前的路径作为工作目录,这时候getcwd得到的路径和其他两个方法是一样的。但是,我们一旦修改的工作目录,那么getcwd方法就会得到我们修改的工作目录,而其他两个方法得到的路径不变。

>>> os.getcwd()
'C:\\Users\\ASUS\\Desktop\\项目资料\\模型引擎项目\\luigi_process_test\\code\\standard_test'
>>> os.getcwd()
'C:\\Users\\ASUS\\Desktop\\项目资料\\模型引擎项目\\luigi_process_test\\code'

2、然后再区分 realpath和abspath的区别,其实可以以一句话总结

如桌面有文件的快捷方式,abs就是快捷方式的路径,real就是快捷方式对应文件的路径

注意:他们都是返回绝对路径。


>>> os.path.realpath("/etc/sysconfig/selinux")
'/etc/selinux/config'
>>> os.path.realpath("/usr/bin/python")
'/usr/bin/python2.7'


>>> os.path.abspath("/etc/sysconfig/selinux")
'/etc/sysconfig/selinux'
>>> os.getcwd()
'/root'
>>> os.path.abspath("python_modu")
'/root/python_modu

上面例子可以看到,etc/sysconfig/selinux其实是/etc/selinux/config 应用的一个软连接,同理/usr/bin/python其实是/usr/bin/python2.7的一个软连接。如果使用abspath,那他就会返回当前软连接的一个绝对路径而不会取寻找应用真实的位置了。

 

二、常用应用场景

1、getcwd

获取当前工作目录,并配合chdir()方法,修改当前的工作目录,来进行定位。

那么,有一个问题:如果A调用了B,B里面有一行getcwd()的代码,那么,这里的getcwd应该是A的目录还是B的目录呢?我们验证一下。

# inner_test.py 代码

import os


def inner_test_getcwd():
    print(os.getcwd())


# test.py 代码

from standard_test.inner_test import inner_test_getcwd

inner_test_getcwd()


# 输出
C:\Users\ASUS\Desktop\项目资料\模型引擎项目\luigi_process_test\code

首先我们选用上面的目录结构,然后使用test.py代码引用inner_test.py里面的getcwd,结果输出了调用方的工作目录。所以我们python是以最外层的调用方作为默认的工作目录,然后我们可以再被调用方使用os.getcwd()来获取最外层的调用的目录(也就是工作目录)

2、realpath

常用来获取当前脚本文件的绝对路径。不受调用方的影响。我们同样采用刚才的目录结构,但是修改test.py和inner_test.py的代码如下。

# inner_test.py 代码

import os


def inner_test_realpath():
    print("inner-test-dir-realpath: ",os.path.dirname(os.path.realpath(__file__)))


# test.py 代码

import os

from standard_test.inner_test import inner_test_realpath

print("test-dir-realpath: ", os.path.dirname(os.path.realpath(__file__)))
inner_test_realpath()


# 输出
test-dir-realpath:  C:\Users\ASUS\Desktop\项目资料\模型引擎项目\luigi_process_test\code
inner-test-dir-realpath:  C:\Users\ASUS\Desktop\项目资料\模型引擎项目\luigi_process_test\code\standard_test

可以看出,realpath得到的是当前执行代码的文件的绝对路径。

3、abspath

这个好像应用的不是很多,后面如果有他的应用场景,我再更新过来。

 

  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值