当前位置: 首页 > news >正文

os详解,从上面是‘os‘模块?到核心组成和常用函数

一.什么是 os 模块?

os 模块是 “Operating System”(操作系统)的缩写。它提供了一种方便的、可移植的方式来使用操作系统的功能。简单来说,Python 通过 os 模块充当了你和操作系统之间的桥梁,让你能够用 Python 代码来执行原本需要在命令行(如 Windows 的 cmd 或 Linux/macOS 的 Terminal)中才能完成的各种系统级任务。

这些任务主要包括:

  • 文件和目录操作(创建、删除、重命名、遍历)
  • 文件路径处理(拼接、分割、获取路径信息)
  • 读取和设置环境变量
  • 执行系统命令
  • 管理进程

os 模块最大的优点之一是跨平台性。它会帮你处理好不同操作系统(如 Windows, macOS, Linux)之间的差异。例如,Windows 的路径分隔符是 \,而 Linux/macOS 是 /。如果你使用 os.path.join() 来拼接路径,它会自动使用当前操作系统对应的正确分隔符,让你的代码无需修改就能在不同系统上运行。


二.核心组成部分与常用函数

os 模块功能非常丰富,我们将其分为几个核心类别来讲解,并附上代码示例。

1. 路径操作 (os.path)

这是 os 模块中最常用、最重要的子模块,专门用于处理文件和目录的路径字符串。

  • os.path.join(path, *paths):智能拼接路径
    这是拼接路径的首选方式,因为它会自动处理不同操作系统的路径分隔符。

    import os# 在 Windows 上,结果是 'data\\images\\cat.png'
    # 在 Linux/macOS 上,结果是 'data/images/cat.png'
    full_path = os.path.join('data', 'images', 'cat.png')
    print(full_path)# 避免使用字符串拼接,因为不具备跨平台性
    # bad_path = 'data' + '/' + 'images' + '/' + 'cat.png' # 在 Windows 上可能出问题
    
  • os.path.exists(path):检查路径是否存在
    检查一个文件或目录是否存在,返回 TrueFalse

    import os
    print(os.path.exists('C:/Users')) # 在 Windows 上很可能返回 True
    print(os.path.exists('./non_existent_file.txt')) # 返回 False
    
  • os.path.isfile(path)os.path.isdir(path):判断是文件还是目录

    import os
    # 假设当前目录下有一个名为 my_script.py 的文件和一个名为 data 的文件夹
    print(os.path.isfile('my_script.py')) # 返回 True
    print(os.path.isdir('my_script.py'))  # 返回 False
    print(os.path.isdir('data'))        # 返回 True
    
  • os.path.split(path)os.path.splitext(path):拆分路径

    • split():将路径拆分为 (目录部分, 文件名部分)
    • splitext():将路径拆分为 (文件名主干, 扩展名)
    import os
    path = '/home/user/project/main.py'dir_part, file_part = os.path.split(path)
    print(f"目录部分: {dir_part}")   # 输出: /home/user/project
    print(f"文件名部分: {file_part}") # 输出: main.pyroot, extension = os.path.splitext(path)
    print(f"文件名主干: {root}")      # 输出: /home/user/project/main
    print(f"扩展名: {extension}")  # 输出: .py
    
  • os.path.basename(path)os.path.dirname(path):获取文件名和目录名

    import os
    path = '/home/user/project/main.py'
    print(f"文件名: {os.path.basename(path)}") # 输出: main.py
    print(f"目录名: {os.path.dirname(path)}")  # 输出: /home/user/project
    
2. 目录与文件操作

这类函数直接对文件系统进行操作。

  • os.getcwd():获取当前工作目录 (Get Current Working Directory)

    import os
    current_dir = os.getcwd()
    print(f"当前工作目录是: {current_dir}")
    
  • os.chdir(path):改变当前工作目录 (Change Directory)

    import os
    # 切换到 C 盘根目录 (Windows 示例)
    # os.chdir('C:\\')
    # print(os.getcwd())
    
  • os.listdir(path):列出目录中的所有文件和文件夹
    返回一个包含目录下所有条目名称的列表。

    import os
    # 列出当前目录下的内容
    items = os.listdir('.') # '.' 代表当前目录
    print(items)
    
  • os.mkdir(path)os.makedirs(path):创建目录

    • mkdir():只能创建单层目录。如果父目录不存在,会报错。
    • makedirs():可以创建多层嵌套的目录(递归创建)。如果目录已存在,可以通过 exist_ok=True 参数避免报错。
    import os
    # 创建单层目录
    if not os.path.exists('single_dir'):os.mkdir('single_dir')# 创建多层目录,更推荐的方式
    os.makedirs('nested/deep/dir', exist_ok=True)
    
  • os.remove(path)os.unlink(path):删除文件
    这两个函数功能相同。如果路径是目录,会报错。

    # 假设有一个名为 temp.txt 的文件
    # if os.path.exists('temp.txt'):
    #     os.remove('temp.txt')
    
  • os.rmdir(path)os.removedirs(path):删除目录

    • rmdir():只能删除目录。
    • removedirs():递归删除目录。
    # 假设有一个名为 single_dir 的空目录
    # if os.path.exists('single_dir'):
    #     os.rmdir('single_dir')
    
  • os.rename(src, dst):重命名或移动文件/目录
    如果 src (源) 和 dst (目标) 在同一个目录下,就是重命名。如果在不同目录下,就是移动。

    import os
    # 创建一个文件用于演示
    with open('old_name.txt', 'w') as f:f.write('hello')# 重命名
    os.rename('old_name.txt', 'new_name.txt')# 移动文件
    os.makedirs('storage', exist_ok=True)
    os.rename('new_name.txt', os.path.join('storage', 'moved_file.txt'))
    
3. 环境变量
  • os.environ:获取所有环境变量
    它表现得像一个 Python 字典,包含了所有的环境变量。

    import os
    # 获取所有环境变量
    # print(os.environ)# 获取单个环境变量,比如 'PATH'
    path_variable = os.environ.get('PATH') # 使用 .get() 更安全,如果不存在返回 None
    print(f"PATH 环境变量的一部分: {path_variable[:30]}...")
    
  • os.getenv(key, default=None):安全地获取环境变量
    推荐使用此函数,因为它在环境变量不存在时不会报错,而是返回 None 或你指定的默认值。

    import os
    api_key = os.getenv('MY_API_KEY', 'default_key')
    print(f"API Key: {api_key}")
    
4. 执行系统命令
  • os.system(command):在子 shell 中执行命令
    这会打开一个操作系统的 shell 来执行命令,并将命令的输出直接打印到控制台。它只返回命令的退出状态码(通常 0 表示成功)。

    import os
    # 在 Linux/macOS 上
    # os.system('ls -l')# 在 Windows 上
    # os.system('dir')
    

    注意os.system() 的功能相对简单,并且存在安全风险(命令注入)。在现代 Python 开发中,更推荐使用功能更强大、更安全的 subprocess 模块来执行外部命令。

三.总结

os 模块是 Python 与操作系统交互的基石。掌握它的核心功能,特别是 os.path 子模块以及文件/目录操作函数,是进行任何涉及文件系统自动化的 Python 编程的必备技能。同时,了解并适时使用 pathlib 会让你的路径处理代码更加优雅和现代化。

http://www.dtcms.com/a/336616.html

相关文章:

  • 智能合约里的 “拒绝服务“ 攻击:让你的合约变成 “死机的手机“
  • 什么是AI Agent(智能体)
  • nature子刊:MCNN基于电池故障诊断的模型约束的深度学习方法
  • [Oracle数据库] Oracle 多表查询
  • 网络常识-我的电脑啥时安装了证书
  • 生成模型实战 | InfoGAN详解与实现
  • java如何使用正则提取字符串中的内容
  • 谈谈对面向对象OOP的理解
  • 深入分析 Linux PCI Express 子系统
  • Highcharts 官方文档与 API 查询技巧解析
  • android aidl相关学习
  • 【昇腾】单张48G Atlas 300I Duo推理卡MindIE+WebUI方式跑14B大语言模型_20250817
  • 在鸿蒙中实现深色/浅色模式切换:从原理到可运行 Demo
  • 母猪姿态转换行为识别:计算机视觉与行为识别模型调优指南
  • redis和cdn的相似性和区别
  • 编程算法实例-最小公倍数
  • Python自学09-常用数据结构之元组
  • 黑马商城day08-Elasticsearch作业(个人记录、仅供参考、详细图解)
  • 嵌入式系统中的签名验证:设计与原理解析(C/C++代码实现)
  • Java基础Object中常见问题解析
  • Redis面试精讲 Day 24:Redis实现限流、计数与排行榜
  • 数字货币的法律属性与监管完善路径探析
  • SCAI采用公平发射机制成功登陆LetsBonk,60%代币供应量已锁仓
  • SpringBoot中,接口加解密
  • C语言课程开发
  • 【前端基础】flex布局中使用`justify-content`后,最后一行的布局问题
  • Java 基础 -- Java 基础知识
  • 2025-08-17 李沐深度学习18——循环神经网络基础
  • Spring Cloud系列—Seata部署
  • 照相机标定-动手学计算机视觉16