暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

python获取一个目录的上两级目录

coolpython 2021-08-31
4475

os.path.dirname

获取一个目录的父级目录,或者父级的父级目录是一个很常见的操作,os.path模块提供了dirname函数可以轻易的获取父级目录

>>> import os
>>> path = '/data3/zhangdongsheng/sheng/test'
>>> parent_path = os.path.dirname(path)
>>> parent_path
'/data3/zhangdongsheng/sheng'

但若想获得更高层级的目录,就必须多次调用dirname函数,以获取前3级目录为例,你可能要写出这样的代码

import os

path = '/data3/zhangdongsheng/sheng/test'
path = os.path.dirname(path)
path = os.path.dirname(path)
path = os.path.dirname(path)
print(path)

get_parent_path

这是非常糟糕的代码,丑陋无比,我曾经封装过一个函数来解决这个问题

import os

path = '/data3/zhangdongsheng/sheng/test'

def get_parent_path(path, level=1):
parent_path = path
for i in range(level):
parent_path = os.path.dirname(parent_path)

return parent_path


parent_path = get_parent_path(path, level=3)
print(parent_path)

get_parent_path根据参数level决定调用多少次dirname函数,虽然这个函数也占用了5行代码,但至少看起来不丑陋,还有没有其他方法呢,当然有,我在pip的源码里找到了一个更简洁的方法

os.path.join

import os

path = '/data3/zhangdongsheng/sheng/test'
parent_path = os.path.join(path, '..', '..', '..')
parent_path = os.path.abspath(parent_path)
print(parent_path)

..表示上一级目录,通过这个符号向上跳跃三级,再通过abspath函数获得绝对路径,代码还可以更简洁

path = '/data3/zhangdongsheng/sheng/test'
parent_path = os.path.abspath(os.path.join(path, '..', '..', '..'))
print(parent_path)


文章转载自coolpython,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论