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

Python os模块完全指南:从入门到实战

一、os模块概述

os模块是Python标准库中与操作系统交互的核心工具,它封装了底层操作系统接口,为开发者提供了跨平台的统一API。该模块主要包含以下几类功能:

  1. 文件和目录操作:

    • 创建/删除文件(os.remove())
    • 创建/删除目录(os.mkdir()/os.rmdir())
    • 文件重命名(os.rename())
    • 遍历目录(os.listdir())
  2. 路径管理:

    • 路径拼接(os.path.join())
    • 路径分割(os.path.split())
    • 获取绝对路径(os.path.abspath())
    • 检查路径存在性(os.path.exists())
  3. 系统环境访问:

    • 获取环境变量(os.environ)
    • 执行系统命令(os.system())
    • 获取当前工作目录(os.getcwd())
    • 修改工作目录(os.chdir())

典型应用场景包括:

  • 批量重命名文件
  • 递归遍历目录结构
  • 系统环境检测
  • 跨平台路径处理
  • 自动化脚本编写

该模块属于Python内置标准库,无需额外安装,通过import os即可直接使用。其API设计遵循"一次编写,多平台运行"的原则,自动适配Windows、Linux、macOS等不同操作系统。在系统编程、自动化运维、文件处理等场景中都是基础必备模块。

import os

二、核心功能与API详解

1. 路径管理(os.path子模块)

▶ os.path.join() - 跨平台路径拼接

os.path.join(path1, path2, ...)
  • 参数:接受多个字符串参数,按顺序拼接

  • 作用:自动适配当前系统的路径分隔符(Windows用\,Linux/macOS用/

# 示例:跨平台拼接路径
path = os.path.join('data', 'mnist', 'train')  # Windows: data\mnist\train
print(path)

▶ os.path.abspath() - 获取绝对路径 

os.path.abspath(relative_path)
  • 参数:相对路径字符串

  • 返回值:绝对路径字符串

# 示例:获取当前脚本的绝对路径
abs_path = os.path.abspath(__file__)
print(f"脚本绝对路径:{abs_path}")

▶ os.path.dirname() - 获取父目录 

os.path.dirname(path)
  • 参数:文件或目录路径

  • 返回值:上级目录路径

# 示例:获取当前脚本的父目录
parent_dir = os.path.dirname(__file__)
print(f"父目录:{parent_dir}")

2. 文件与目录操作

▶ os.makedirs() - 递归创建目录

os.makedirs(name, mode=0o777, exist_ok=False)
  • 参数

    • name:目录路径

    • mode(可选):权限模式(Unix系统有效)

    • exist_ok:若为True,目录存在时不报错

# 示例:安全创建多级目录
os.makedirs('project/data/images', exist_ok=True)

▶ os.listdir() - 列出目录内容 

os.listdir(path='.')
  • 参数:目录路径(默认为当前目录)

  • 返回值:文件名列表

# 示例:遍历目录下的文件
for file in os.listdir('data'):if file.endswith('.jpg'):print(f"找到图片文件:{file}")

▶ os.remove() - 删除文件 

os.remove(path)
  • 参数:文件路径

# 示例:删除临时文件
if os.path.exists('temp.txt'):os.remove('temp.txt')

3. 环境变量管理

▶ os.environ - 环境变量字典

# 获取所有环境变量
print(os.environ)# 获取特定变量(如PATH)
path = os.environ.get('PATH', '默认值')
print(f"系统PATH变量:{path}")

▶ os.getenv() - 安全获取环境变量 

os.getenv(key, default=None)
  • 参数

    • key:变量名

    • default:变量不存在时的默认值

# 示例:获取JAVA_HOME
java_home = os.getenv('JAVA_HOME', '/usr/lib/jvm/default-java')

4. 系统命令执行

▶ os.system() - 执行Shell命令

os.system(command)
  • 参数:字符串形式的命令

  • 返回值:命令的退出状态码

# 示例:执行ping命令
ret = os.system('ping -c 4 www.baidu.com')  # Linux/macOS
if ret == 0:print("Ping成功!")

▶ os.popen() - 获取命令输出 

os.popen(command, mode='r')
  • 参数

    • command:Shell命令

    • mode:读写模式('r''w'

# 示例:读取命令输出
with os.popen('ipconfig' if os.name == 'nt' else 'ifconfig') as f:print(f.read())

三、实战案例:自动化数据预处理

场景描述

假设我们需要:

  1. data/raw目录下存放原始数据

  2. data/processed目录存放处理后的数据

  3. 自动清理临时文件

import os
import shutil# 1. 定义路径
raw_dir = os.path.join('data', 'raw')
processed_dir = os.path.join('data', 'processed')
temp_file = 'temp.tmp'# 2. 创建目录结构
os.makedirs(raw_dir, exist_ok=True)
os.makedirs(processed_dir, exist_ok=True)# 3. 模拟数据处理
with open(temp_file, 'w') as f:f.write("临时数据...")# 4. 移动文件到processed目录
shutil.move(temp_file, os.path.join(processed_dir, 'final_data.txt'))# 5. 验证结果
print(f"原始目录内容:{os.listdir(raw_dir)}")
print(f"处理目录内容:{os.listdir(processed_dir)}")

四、os vs pathlib 对比

特性os+os.pathpathlib(Python 3.4+)
设计理念函数式编程面向对象(Path类)
路径拼接os.path.join(a, b)Path(a) / b
方法链不支持支持(如Path().mkdir().touch()
推荐场景旧代码维护新项目开发
# pathlib等效示例
from pathlib import Path
Path('data/processed').mkdir(parents=True, exist_ok=True)

五、常见问题解答

Q1:os.path.exists()os.path.isfile()有什么区别?

  • exists():检查路径是否存在(文件或目录均可)

  • isfile():严格检查是否为文件

Q2:如何递归删除目录?

import shutil
shutil.rmtree('directory')  # 删除目录及其所有内容

六、总结

通过本文,你应掌握:

  1. os模块的核心API及其参数

  2. 跨平台路径处理的最佳实践

  3. 文件/目录操作的完整生命周期管理

  4. 系统命令执行与环境变量访问

扩展阅读

  • Python官方文档 - os模块

  • RealPython - 文件系统操作指南

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


文章转载自:
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://.
http://www.dtcms.com/a/281728.html

相关文章:

  • python编程实现GUI界面的排序与查找算法动态模拟演示程序
  • Sa-Token使用要点
  • mongoDB安装初始化及简单介绍
  • 2025/7/15——java学习总结
  • Pandas 和 NumPy 使用文档整理
  • 大宗现货电子盘交易系统核心功能代码解析
  • QT6 源,六章事件系统(8)QEvent 的孙子类:QEnterEvent 光标进入
  • 无穿戴动捕如何凭借摄像头视觉识别算法,赋能高校专业教学革新?
  • python进阶
  • 145-变分模态分解VMD与平稳小波变换SWT信号降噪算法实现!
  • 4G模块 A7680通过MQTT协议连接到onenet(新版)
  • WebAPIs基本认知,DOM基础介绍
  • 基于Springboot+UniApp+Ai实现模拟面试小工具五:权限校验参数校验及日志功能实现
  • Ubuntu 22.04 安装 mysql-server与 postgreSQL 服务端
  • el-tooltip 快速滚动的时候出现残影如何解决 vue3
  • 30.安卓逆向2-frida hook技术-hook So文件(获取app加载的所有模块、导入函数、导出函数、hook SO函数)
  • 区块链发展史全景长图
  • 强化学习Reinforcement Learning
  • 基于Python的图像文字识别系统
  • Glide双内存缓存加载机制详细介绍
  • K型热电偶电动势以及温度对照表
  • 驱动开发系列61- Vulkan 驱动实现-SPIRV到HW指令的实现过程(2)
  • [Science]论文 视黄素与细胞修复
  • 2025-07-15通过边缘线检测图像里的主体有没有出血
  • IMU 能为无人机提供什么数据?
  • 【论文阅读】A Survey on Knowledge-Oriented Retrieval-Augmented Generation(3)
  • 移动端字体适配
  • 谷歌浏览器控制台如何切换中文
  • StampedLock分析
  • 链表的 哑结点的本质