不能不知道的OS模块的那些常用函数(附内置变量)

2023-11-05

OS 模块

该模块提供了各种函数,允许您操作文件路径和检查与路径相关的信息,比如是否存在、文件扩展名、目录名等等。

1.1 常用函数

其中一些常用的函数包括:

  1. os.path.join(*paths):该函数用于智能地连接一个或多个路径组件。它接受多个参数,并返回通过适当的路径分隔符连接的新路径字符串,根据底层操作系统的不同使用不同的路径分隔符。

  2. os.path.abspath(path):该函数返回指定路径的绝对路径版本。它会解析任何符号链接,并用绝对路径替换相对路径。

  3. os.path.exists(path):该函数检查给定的路径是否在文件系统中存在,如果存在则返回True,否则返回False

  4. os.path.isdir(path):如果指定的路径指向一个现有目录,则返回True,否则返回False

  5. os.path.isfile(path):如果指定的路径指向一个现有文件,则返回True,否则返回False

  6. os.path.basename(path):返回路径的基本名称,即路径的最后一个组件,一般常用来表示文件名

  7. os.path.dirname(path):返回路径的目录名,即路径除了最后一个组件外的所有部分。

  8. os.path.splitext(path):将路径拆分为元组(root, ext),其中root是没有扩展名的部分,而ext是文件扩展名(包括点)。

1.2 使用示例

以下是如何使用os.path的示例:

import os

path = "/home/user/documents/sample.txt"

print("拼接后的路径:", os.path.join("/home", "user", "documents", "file.txt"))
print("绝对路径:", os.path.abspath(path))
print("路径是否存在?", os.path.exists(path))
print("是一个目录?", os.path.isdir(path))
print("是一个文件?", os.path.isfile(path))
print("文件基本名称:", os.path.basename(path))
print("目录名:", os.path.dirname(path))
print("拆分扩展名:", os.path.splitext(path))

1.3 内置变量

内置变量本不属于这一部分,但是,经常与os.path模块结合使用。因此,将内置变量补充到了这一部分。

  1. __name__: 表示当前模块的名称。当模块被直接执行时,__name__的值为'__main__';当模块被导入时,__name__的值为模块的名称。

  2. __file__:是一个特殊的内置变量之一,它表示当前模块(或脚本)的文件路径。

  3. __doc__: 表示当前模块(或函数、类)的文档字符串。文档字符串是位于模块、函数或类定义之前的字符串,用于提供有关模块、函数或类的简短描述和说明。

  4. __package__: 表示当前模块所属的包名称。对于顶层模块(非包内模块),__package__的值为None

  5. __builtins__: 是一个字典,包含了Python的内建函数、异常和其他内建对象。

  6. __loader__: 表示加载当前模块的模块加载器对象。

  7. __spec__: 表示当前模块的规范对象(ModuleSpec)。规范对象包含有关模块的元数据,如文件路径、包信息等。

  8. __annotations__: 用于存储变量的类型注解信息。

  9. __cached__: 仅在编译模式下可用,表示当前模块的缓存文件路径。

  10. __package__: 表示当前模块所属的包名称。

  11. __class__: 用于类中,表示当前实例所属的类。

1.4 附:内置变量详解

  1. __name__
    __name__表示当前模块的名称。当模块被直接执行时,__name__的值为'__main__';当模块被导入时,__name__的值为模块的名称。

    示例:
    假设我们有一个名为example_module.py的模块文件,其中包含以下代码:

    # example_module.py
    
    def hello():
        print("Hello from example_module!")
    
    print("Module name:", __name__)
    
    if __name__ == "__main__":
        hello()
    

    当我们直接运行example_module.py时,输出将是:

    Module name: __main__
    Hello from example_module!
    

    当我们在另一个脚本中导入example_module.py时,输出将是:

    Module name: example_module
    
  2. __file__
    __file__ 表示当前模块(或脚本)的文件路径。它是一个内置变量,用于获取当前Python脚本的绝对文件路径。

    在Python中,当一个脚本(模块)被执行时,Python解释器会将脚本的绝对文件路径存储在__file__变量中。这允许我们在代码中获取当前脚本的文件路径,从而可以操作脚本所在的文件或者查找资源文件的路径。

    注意:__file__只在脚本文件中可用,而在交互式解释器中或直接执行解释器的代码中,__file__是未定义的

    以下是一个使用__file__获取当前脚本文件路径的示例:

    假设我们有一个名为example_script.py的脚本文件,其中包含以下代码:

    # example_script.py
    
    import os
    
    current_script_path = os.path.abspath(__file__)
    print("当前脚本文件路径:", current_script_path)
    

    当我们直接运行example_script.py时,输出将是:

    当前脚本文件路径: /path/to/example_script.py
    
  3. __doc__
    __doc__表示当前模块(或函数、类)的文档字符串。文档字符串是位于模块、函数或类定义之前的字符串,用于提供有关模块、函数或类的简短描述和说明。

    示例:
    在上面的example_module.py中,我们可以添加文档字符串来描述模块的功能:

    # example_module.py
    
    """This is an example module."""
    
    def hello():
        """Prints a greeting message."""
        print("Hello from example_module!")
    
    print("Module name:", __name__)
    
    if __name__ == "__main__":
        hello()
    

    在Python交互式解释器中,我们可以通过访问__doc__来查看模块的文档字符串:

    import example_module
    
    print(example_module.__doc__)
    

    输出:

    This is an example module.
    
  4. __package__
    __package__表示当前模块所属的包名称。

    示例:
    假设我们有一个包结构如下所示:

    my_package/
    │── __init__.py
    │── module_a.py
    └── subpackage/
        │── __init__.py
        └── module_b.py
    

    module_b.py中,我们可以使用__package__来获取包名称:

    # module_b.py
    
    print("Package name:", __package__)
    

    当我们导入module_b.py时,输出将是:

    Package name: my_package.subpackage
    
  5. __builtins__
    __builtins__是一个字典,包含了Python的内建函数、异常和其他内建对象。

    示例:
    我们可以使用__builtins__来访问一些内建函数,如print()len()

    print("Built-in print function:", __builtins__.print)
    print("Built-in len function:", __builtins__.len)
    

    输出:

    Built-in print function: <built-in function print>
    Built-in len function: <built-in function len>
    

    __builtins__通常不直接使用,因为内建函数和对象已经是全局可访问的。

  6. __loader__
    __loader__表示加载当前模块的模块加载器对象。

    示例:
    我们可以在一个模块中访问__loader__来了解加载该模块的加载器:

    # example_module.py
    
    print("Module loader:", __loader__)
    

    输出通常会显示加载器的类型和相关信息。

  7. __spec__
    __spec__表示当前模块的规范对象(ModuleSpec)。规范对象包含有关模块的元数据,如文件路径、包信息等。

    示例:
    我们可以在一个模块中访问__spec__来了解该模块的规范信息:

    # example_module.py
    
    print("Module specification:", __spec__)
    

    输出通常会显示规范对象的属性和相关信息。

  8. __annotations__
    __annotations__用于存储变量的类型注解信息。

    示例:
    假设我们有一个函数,使用了类型注解:

    def add(a: int, b: int) -> int:
        return a + b
    
    print("Annotations:", __annotations__)
    

    输出:

    Annotations: {'a': <class 'int'>, 'b': <class 'int'>, 'return': <class 'int'>}
    

    __annotations__存储了参数和返回值的类型信息。

  9. __cached__
    __cached__仅在编译模式下可用,表示当前模块的缓存文件路径。当Python解释器运行一个模块时,它会将模块的字节码缓存到硬盘上,以便下次快速加载。

    示例:
    在编译模式下运行模块后,可以访问__cached__来查看缓存文件的路径:

    # example_module.py
    
    print("Cached file path:", __cached__)
    

    输出通常会显示缓存文件的路径。

  10. __package__
    __package__表示当前模块所属的包名称。

  11. __class__
    __class__用于类中,表示当前实例所属的类。

    示例:
    假设我们有一个类Person

    class Person:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def say_hello(self):
            print(f"Hello, I'm {self.name}.")
    
    person = Person("Alice", 30)
    print(person.__class__)
    

    输出:

    <class '__main__.Person'>
    

    __class__返回Person类的类型对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不能不知道的OS模块的那些常用函数(附内置变量) 的相关文章

随机推荐

  • 编程实现Ctrl+A或V==是否被按下

    private void lvBookmarks KeyPress object sender KeyPressEventArgs e if e Control e KeyCode Keys A region 全选ListView控件lvB
  • 修复和预防Bug的成本的量化对比

    当我们打算提高软件质量的时候 首先考虑到的可能就是购买新工具的成本和实施新工具的人力成本 以及可能会因为增加了新的测试过程而 延长 的开发生命周期 但实际上 首先我们应该考虑从现在的产品生命周期中查找和修复问题产生的成本 除了这些直接的成本
  • 天才的引导历程

    这本书与科学15讲差不多 是数学科普类书籍 这里面对于无穷小数的思考 提出 可以看一看 学习数学的人真的可以看一看 2014 1 1
  • 前言技术:swagger

    1 前后端分离的特点 前后端分离是的前端与后端之间的职责更加明确 后台 负责业务处理 前端 负责显示逻辑 在这种情况下 前端和后端可以分别交付给专业的开发人员去做 所以是必须要定义前后端直接的对接 接口 否则各自为是则项目无法集成 这时就需
  • 基于51单片机的超声波水位液位监测仿真程序设计

    硬件设计 上一篇咱们说了基于液位传感器的优缺点 其中缺点就是测量距离有限 这里就引入了超声波的测距方式 该方式测量距离就大大增加 超声波测距系统原理 在超声探测电路中 发射端得到输出脉冲为一系列方波 其宽度为发射超声的时间间隔 被测物距离越
  • 中国移动OneOS助力全国大学生物联网竞赛开幕

    本文分享自中移物联网微信公众号 中国移动OneOS助力全国大学生物联网竞赛开幕 近日 2022年全国大学生物联网设计竞赛正式开赛 该项赛事是教育部高等学校计算机类专业教学指导委员会创办的物联网领域的学科竞赛 是以学科竞赛推动专业建设 培养大
  • Vmware虚拟机下三种网络模式配置

    原创链接 http blog csdn net collection4u article details 14127671 Vmware虚拟机下三种网络模式配置 VMware虚拟机有三种网络模式 分别是Bridged 桥接模式 NAT 网络
  • docker-compose部署Nacos集群

    docker compose部署Nacos集群 1 前置准备 docker nacos的数据库 2 创建nacos目录 3 切换到nacos目录下 创建并写nginx conf配置文件 4 创建并写docker compose yaml配置
  • Channel-wise Knowledge Distillation for Dense Prediction(ICCV 2021)原理与代码解析

    paper Channel wise Knowledge Distillation for Dense Prediction official implementation https github com irfanICMLL Torch
  • Vue3的从入门到实战的培训教程大纲

    Vue3的从入门到实战的培训教程大纲 第一部分 Vue3入门 Vue框架概述 介绍Vue的历史和特点 解释Vue的MVVM架构 Vue3的新特性 对比Vue2和Vue3的主要差异 强调Vue3的性能改进和优化 安装与配置Vue3 下载和安装
  • java 多线程-03-等待wait 和 通知 notify

    等待wait 和 通知 notify 引入 java多线程协作支持 wait notify是object类 任何对象都可以调用这两个方法 public final void wait throws InterruptedException
  • 如何使用宝塔部署网站

    1 根据自己的版本输入不同安装宝塔的命令 我用的使用的是finashell软件 安装及使用前一篇已经介绍过了 用的是第一个安装命令 yum install y wget wget O install sh https download bt
  • 图的遍历(详解DFS与BFS)

    首先 我们来看一下涉及的知识点 图 图 G V E 由顶点集 V 和边集 E 组成 每条边对应一个点对 v w 其中 v w 属于 V 如果图中的点对是有序的 那么该图就是有向图 反之为无向图 邻接点 若顶点 v 与 w 之间存在一条边 则
  • 6、状态模式

    文章目录 概念 3个角色 demo 概念 状态模式属于行为型模式 只需要改变对象状态即可改变对象的行为 状态模式对 开闭原则 的支持并不太好 所以对象状态最好为有限个且不常变动 场景 1 行为随状态 属性改变而改变的场景 2 条件 分支语句
  • 终于拿下淘宝了。淘宝抓取,淘宝爬虫。taobao spider

    上个demo先
  • Linux 查看当前路径下所有文件夹大小的方法

    进入需要查看的目录 例如 根目录 cd 查看当前目录下每个文件夹的大小 du sh 查看当前目录下每个文件夹的大小并排序 单位 字节 n 按照数值排序 du s sort n 补充 du sh 查看当前目录总共占的容量 而不单独列出各子项占
  • Task-Oriented Conversation Generation Using Heterogeneous Memory Networks

    EMNLP 2019 录用长文 Abstract 如何将外部知识库与对话模型结合起来是一个重要的问题 传统上人们是使用了Memory Network 然而当面对多种来源的 异构的info时 Mem对这些info的处理并不好 我理解的是权重的
  • Numpy基础数据结构

    Numpy基础数据结构 NumPy数组是一个多维数组对象 称为ndarray 其由两部分组成 实际的数据 描述这些数据的元数据 Numpy Python开源的科学计算工具包 高级的数据编程工具 ndarray 是强大的N维数组对象 对数据结
  • Eclipse导入项目No projects are found to import

    如果发现导入工程 impot 的时候 出现 No projects are found to import 的提示 首先查看项目目录中是否有隐藏文件 project 还有目录结构也还要有一个隐藏文件 classpath 如果没有 你可以参考
  • 不能不知道的OS模块的那些常用函数(附内置变量)

    文章目录 OS 模块 1 1 常用函数 1 2 使用示例 1 3 内置变量 1 4 附 内置变量详解 OS 模块 该模块提供了各种函数 允许您操作文件路径和检查与路径相关的信息 比如是否存在 文件扩展名 目录名等等 1 1 常用函数 其中一