python OS.path相关使用

os.path.realpath(_file_)

已知本文件名为 test1.py. 绝对路径为: C:\Desktop\scripts\perf\nvmf\test1.py

u = os.path.realpath(__file__)
print(u)

>>> C:\Desktop\scripts\perf\nvmf\test1.py

所以 os.path.realpath( _file_),是得到本文件的绝对路径(真实路径),精确到文件名
,是对给定文件名前加上当前工作目录的绝对路径,至于你给定的文件名对应文件是否真的存在并不关心(因为你有可能是想要创建文件呢)
那么关于真实路径,是当存在软链接的时候,可以返回真实文件的路径


os.path.dirname(path)

已知本文件名为 test1.py. 绝对路径为: C:\Desktop\scripts\perf\nvmf\test1.py

x = os.path.dirname(os.path.realpath(__file__))
print(x)

>>> C:\Desktop\scripts\perf\nvmf

所以 os.path.dirname(path) , 是得到 括号内 path 的上一级路径


os.path.join()

1,拼接
x = os.path.join('root','test','110.txt')
print(x)

>>> root/test/110.txt

可以看出,os.path.join() 有拼接作用,而且是把括号里的每个元素用 ‘/’ 给拼接起来,里面的元素不限于三个,因为源码中的参数是 *path, 是个不定长参数。

2, 识别 ‘/’ ,即绝对路径,Windows则是 ‘\’
x = os.path.join('home','/hzx','spdk','/perf')
print(x)

>>> /perf

可以看出,只留下来了最后一个 “ /perf ”, 这是因为只要最后一个 ‘/’ 的元素出现了,那么就把前面的都舍弃,然后继续拼接后面的。
注意:不是关乎 ‘/’ 这个符号,而是它的意义是代表绝对路径
下面的例子中

x = os.path.join('home','/hzx','spdk','/perf', '../../..')
print(x)

>>> /perf/../../..

你看,最后一个元素中也有 ‘/’, 但还是老老实实的拼接上去了。

3, 最后元素为空处理
x = os.path.join('home','hzx','spdk','perf', '')
print(x)

>>> /home/hzx/spdk/perf/

当我们需要在路径后面加上 一个斜杠 ‘/’, 那么可以这么干,将最后一个元素设为空,这样再拼接会自动将 ‘/’ 给拼上去。


os.path.abspath(path)

u = os.path.abspath(__file__)
print(u)

>>> C:\Desktop\scripts\perf\nvmf\test1.py

大家肯定感觉 os.path.abspath(path) 和 前面的os.path.realpath(path) 一样,因为源码中在 abspath 方法中,有这么一行代码

def abspath(path):
	...
	# realpath is a no-op on systems without islink support
	realpath = abspath
	....

当然这两种方法就大同小异了,但是还是有一点小不同的。
之前说 os.path.realpath(path) 即使在有软链接的情况下,还是返回真实文件的路径。
而源码中的那句注释就说明了 os.path.abspath(path) 对软链接的支持。
>>> -rw-rw-r-- 1 guest guest 0 Jun 16 08:36 a

>>> lrwxrwxrwx 1 guest guest 1 Jun 16 08:36 b -> a

>>> from os.path import abspath, realpath
>>> abspath('b')
'/home/guest/play/paths/b'
>>> realpath('b')
'/home/guest/play/paths/a'
除去得到文件路径的简单作用,os.path.realpath(path) 还可以对路径进行操作
x = 'C:\Desktop\scripts\perf\nvmf\test1.py'
y = os.path.abspath(os.path.join(x, "../../../"))
print(y)

>>> C:\Desktop\scripts

我们都知道,../../.. 是路径往上三级,而 os.path.abspath 通过将 路径与../../..拼接竟然就可以直接操作了。
但是首先我们是需要通过 os.path.join 去拼接的,千万不要忘记


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值