Python 多种方法判断是否绝对路径ヾ(•ω•`)o

Python 判断是否绝对路径ヾ(•ω•`)o


一、什么是绝对路径、相对路径🍌

绝对路径:

绝对路径也可称完整路径,是指向文件系统中某个固定位置的路径,不会因当前的工作目录而产生变化为做到这点,它必须包括根目录

绝对路径可以算是大多数人所能接触的一种路径方式,就算不接触编程,绝对路径只要使用计算机就时刻存在。在安装软件时,能看到一个自定义安装路径的选项,这个就是绝对路径。

相对路径:

相对路径则是以指定的工作目录作为基点,避开提供完整的绝对路径。文件名称就可以被视为以指定工作目录为基点的一个相对路径(虽然一般不将其称之为路径)

两者进行对比:

不同操作系统与环境的 路径 格式字符可能都不一样,类Unix系统 对于目录分隔符是 /Microsoft Windows 系统对于目录的分隔符是 /\,这里我们已 Windows 系统为例,分别用两种形式的路径指向一个txt文件:

  • 绝对路径: "D:\这是一个txt文件.txt"
  • 相对路径: 必须处于D盘目录下,.\这是一个txt文件.txt 或是 这是一个txt文件.txt

二、手动编写逻辑判断

一、什么是绝对路径、相对路径 内容中可知,绝对路径必须包含根目录,以此判断为基准,编写辅助函数:

1)、导入 re 正则标准库

import re

2)、判断是否包含根目标

根目录匹配正则表达式 "\d+:/?|\\?.*",将以此为基准判断是否为绝对路径

path = "D:\这是一个txt文件.txt"
print(bool(re.match(r"\d+:/?|\\?.*", path)))

3)、将其编写成辅助函数

def isabs_path(path):
    if re.match(r"\d+:/?|\\?.*", path):
        return True
    return False

编写的函数或方法包含正则,若还未了解过正则表达式还请查阅相关资料


三、使用 OS 标准库判断「常用」

1) 、导入 os 标准库

import os

2)、判断是否为绝对路径函数

os.path.isabs(path)
如果 path 是一个绝对路径,则返回 True。

path = "D:\这是一个txt文件.txt"
print(os.path.isabs(path))

3)、编写辅助函数

def isabs_path(path: str):
    """
    判断是否为绝对路径辅助函数
    :param path: 文本类型路径
    :return: True or False
    """
    return os.path.isabs(path)


path = "D:\这是一个txt文件.txt"
print(isabs_path(path))

四、使用 pathlib 标准库判断「常用」

1) 、导入 pathlib 标准库

from pathlib import Path

2)、判断是否为绝对路径方法

path.is_absolute(),返回此路径是否为绝对路径,如果路径同时拥有驱动器符与根路径(如果风格允许)则将被认作绝对路径

path = r"D:\这是一个txt文件.txt"
p_obj = Path(path)
print(p_obj.is_absolute())

3)、编写辅助函数

pathlib 库是面向对象的文件系统路径,在上面的示例中是实例化了一个路径对象并且调用了其的行为
大多数将路径写入字符串中,对于字符串来说并没有 is_absolute()方法,那么编写辅助函数传入参数时有两种可能:

  • 一是传入的纯字符串路径
  • 二是传入的路径对象

对于可能是纯字符串路径可以有三种解决方式:🤔

  1. 判断传入的路径是否有隶属于 Path 类下

    def isabs_path(path):
        """
        判断是否为绝对路径辅助函数
        :param path: 路径
        :return: True or False
        """
        if issubclass(type(path), Path):
            return path.is_absolute()
        return os.path.isabs(path)
    
  2. 判断传入的路径是否拥有 is_absolute 方法

    def is_absolute(path):
        """
        判断是否为绝对路径辅助函数
        :param path: 路径
        :return: True or False
        """
        if hasattr(path, "is_absolute"):
            return getattr(path, "is_absolute")()
        return os.path.isabs(path)
    
  3. 直接实例化为 Path 对象

    def is_absolute(path):
        """
        判断是否为绝对路径辅助函数
        :param path: 路径
        :return: True or False
        """
        path = Path(path)
        return path.is_absolute()
    

最优解:😮

能看到最后,说明你也为此思考了很多,但对于是否为绝对路径的判断并没有这么复杂麻烦

实际上,os.path.isabs(path),在python 3.6后可以接受一个 path-like object(类路径对象 ),也就是说即使传入的是路径对象那也能够被正常识别。再根据我们的使用场景和习惯一般对于路径的操作,要么用 os.path 标准库,要么用 pathlib 路径对象,那么对于判断是否为绝对路径最优解就只有这两个了👇

只需导入 pathlib 标准库即可

def is_absolute(path):
    """
    判断是否为绝对路径辅助函数
    :param path: 路径
    :return: True or False
    """
    path = Path(path)
    return path.is_absolute()

只需导入 os 标准库即可

def isabs_path(path: str):
    """
    判断是否为绝对路径辅助函数
    :param path: 文本类型路径
    :return: True or False
    """
    return os.path.isabs(path)

参考资料💌


相关博客😏

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值