Python os 模块详解
模块概述
os 模块是 Python 标准库中用于与操作系统进行交互的重要模块。该模块提供了丰富的函数,用于处理文件路径、管理目录、执行系统命令以及获取环境变量等操作。无论是编写脚本工具还是开发应用程序,os 模块都是不可或缺的工具。
路径处理
os.path 子模块专门负责路径相关的操作:
| 函数 | 功能说明 |
|---|---|
| os.path.abspath(path) | 将相对路径转换为绝对路径 |
| os.path.basename(path) | 提取路径中的文件名部分 |
| os.path.dirname(path) | 提取路径中的目录部分 |
| os.path.exists(path) | 检查指定路径是否存在 |
| os.path.isfile(path) | 判断是否为文件 |
| os.path.isdir(path) | 判断是否为目录 |
| os.path.join(*paths) | 智能拼接多个路径组件 |
| os.path.splitext(path) | 分离文件名与扩展名 |
| os.path.getsize(path) | 获取文件大小(单位:字节) |
| os.path.getmtime(path) | 获取文件最后修改时间 |
目录管理
| 函数 | 功能说明 |
|---|---|
| os.getcwd() | 获取当前工作目录 |
| os.chdir(path) | 切换到指定目录 |
| os.listdir(path) | 列出目录下的所有条目 |
| os.mkdir(path) | 创建单层目录 |
| os.makedirs(path) | 递归创建多级目录 |
| os.rmdir(path) | 删除空目录 |
| os.removedirs(path) | 递归删除空目录链 |
遍历目录结构
使用 os.walk 可以遍历任意目录树,获取每个层级的目录和文件信息:
import os
for root, subfolders, files in os.walk("project_data"):
print(f"当前路径: {root}")
print(f"子文件夹: {subfolders}")
print(f"文件列表: {files}")
文件操作
| 函数 | 功能说明 |
|---|---|
| os.rename(old, new) | 重命名文件或目录 |
| os.remove(path) | 删除文件 |
| os.unlink(path) | 删除文件(与 remove 等效) |
| os.stat(path) | 获取文件详细属性 |
系统交互
| 函数/属性 | 功能说明 |
|---|---|
| os.name | 返回操作系统类型(posix/nt) |
| os.environ | 环境变量字典对象 |
| os.getenv(key) | 读取指定环境变量 |
| os.putenv(key, value) | 设置环境变量 |
| os.system(cmd) | 执行 shell 命令 |
| os.urandom(n) | 生成加密用随机字节 |
| os.cpu_count() | 获取 CPU 核心数 |
综合示例
以下示例展示如何结合使用多个函数完成常见任务:
import os
import time
# 切换到脚本所在目录
base_path = os.path.dirname(os.path.abspath(__file__))
os.chdir(base_path)
# 遍历并统计文件和目录数量
file_count = 0
dir_count = 0
for item in os.listdir(base_path):
full_path = os.path.join(base_path, item)
if os.path.isfile(full_path):
file_count += 1
elif os.path.isdir(full_path):
dir_count += 1
print(f"文件数量: {file_count}")
print(f"目录数量: {dir_count}")
# 创建临时目录
temp_dir = os.path.join(base_path, "temp_storage")
if not os.path.exists(temp_dir):
os.makedirs(temp_dir)
print(f"已创建目录: {temp_dir}")
# 获取目录大小
total_size = 0
for root, dirs, files in os.walk(temp_dir):
for f in files:
fp = os.path.join(root, f)
total_size += os.path.getsize(fp)
print(f"目录大小: {total_size} 字节")
# 清理临时目录
if os.path.exists(temp_dir):
os.rmdir(temp_dir)
print("临时目录已清理")
使用注意事项
- 在处理文件路径时,建议使用 os.path.join() 而非字符串拼接,以确保代码在不同操作系统上都能正常运行
- 删除文件或目录前应先检查是否存在
- os.system() 会启动新的 shell 进程,在安全性要求较高的场景中应谨慎使用