Python os 模块使用指南:系统交互的瑞士军刀

Python os 模块使用指南:系统交互的瑞士军刀

作者:书到用时方恨少!

发布日期:2026年3月29日

阅读时长:约18分钟


📌 前言

在 Python 开发中,与操作系统进行交互是极其常见的需求:管理文件、读取环境变量、执行系统命令、处理路径......这些任务都离不开 os 模块 。作为 Python 标准库中最重要的模块之一,os 提供了丰富的函数,让你能够以跨平台的方式调用操作系统底层功能。

无论你是刚入门的 Python 爱好者,还是需要编写自动化脚本的开发者,这篇博客都将带你系统掌握 os 模块的核心用法。我们将从基础操作讲起,逐步深入到实战案例,并通过大量代码示例帮助你快速上手。


1. 📦 os 模块简介

os 模块是 Python 标准库的一部分,直接导入即可使用:

python 复制代码
import os

它封装了操作系统相关的功能,包括:

  • 文件和目录的增删改查
  • 路径的拼接、拆分、判断
  • 环境变量的获取与设置
  • 进程管理(如执行命令、获取进程ID)
  • 权限控制
  • 等等

注意 :由于不同操作系统(Windows、Linux、macOS)的底层 API 存在差异,os 模块会尽量提供统一的接口,但某些功能(如文件权限)在不同平台上的表现可能有所不同。建议在编写跨平台代码时,结合 os.namesys.platform 进行判断。


2. 🖥️ 获取系统信息

在开始操作之前,我们通常需要了解当前系统的类型和环境。

🧭 操作系统名称

python 复制代码
print(os.name)   # 'posix'(Linux/macOS) 或 'nt'(Windows)

🏁 平台详细信息

python 复制代码
import sys
print(sys.platform)   # 'win32'、'linux'、'darwin'(macOS)等

🗺️ 当前工作目录

python 复制代码
print(os.getcwd())   # 获取当前工作目录(绝对路径)

🔢 进程ID

python 复制代码
print(os.getpid())   # 当前进程的PID

👤 用户信息(部分平台)

python 复制代码
print(os.getlogin()) # 登录用户名(可能存在安全限制)

3. 📁 文件和目录操作

这是 os 模块最常用的功能之一。

📂 创建目录

python 复制代码
# 创建单层目录
os.mkdir('test_dir')      # 如果目录已存在会抛出 FileExistsError

# 创建多层目录(类似 mkdir -p)
os.makedirs('a/b/c', exist_ok=True)  # exist_ok=True 避免目录存在时报错

🗑️ 删除目录

python 复制代码
# 删除空目录
os.rmdir('test_dir')

# 递归删除目录(包括非空目录,谨慎使用!)
import shutil
shutil.rmtree('a')   # 使用 shutil 模块更安全

📝 删除文件

python 复制代码
os.remove('file.txt')      # 删除文件
os.unlink('file.txt')      # 与 remove 相同

🔄 重命名文件或目录

python 复制代码
os.rename('old.txt', 'new.txt')   # 可以重命名文件或目录

📋 列出目录内容

python 复制代码
entries = os.listdir('.')   # 返回当前目录下所有文件和目录的名称列表
print(entries)

# 更详细的信息(推荐)
with os.scandir('.') as entries:
    for entry in entries:
        print(entry.name, entry.is_file(), entry.is_dir())

scandirlistdir 更高效,因为它返回的对象可以直接获取文件类型等元数据,避免了额外的系统调用。

🔍 遍历目录树

使用 os.walk 递归遍历目录树:

python 复制代码
for root, dirs, files in os.walk('.'):
    print(f"当前目录: {root}")
    print(f"子目录: {dirs}")
    print(f"文件: {files}")
    print('---')

4. 🧭 路径操作(os.path)

os.path 子模块提供了与操作系统无关的路径操作,是处理文件路径的最佳选择。

🔗 路径拼接

python 复制代码
path = os.path.join('folder', 'sub', 'file.txt')
print(path)   # 'folder/sub/file.txt' (Linux) 或 'folder\\sub\\file.txt' (Windows)

🧩 拆分路径

python 复制代码
# 拆分目录和文件名
dirname, basename = os.path.split('/home/user/file.txt')
print(dirname)   # '/home/user'
print(basename)  # 'file.txt'

# 拆分文件名和扩展名
root, ext = os.path.splitext('file.txt')
print(root)   # 'file'
print(ext)    # '.txt'

✅ 判断路径类型

python 复制代码
os.path.exists('file.txt')      # 是否存在
os.path.isfile('file.txt')      # 是否为文件
os.path.isdir('folder')         # 是否为目录
os.path.isabs('/home/user')     # 是否为绝对路径

📏 获取绝对路径

python 复制代码
abs_path = os.path.abspath('file.txt')
print(abs_path)

🔄 规范化路径

python 复制代码
print(os.path.normpath('a/../b/./c'))   # 'b/c'

5. 🌍 环境变量管理

环境变量是操作系统级别的键值对,常用来存储配置信息。

🔍 获取环境变量

python 复制代码
# 如果变量不存在,返回 None
home = os.getenv('HOME')
print(home)

# 如果变量不存在,返回默认值
path = os.getenv('PATH', '/default/path')

# 或者使用 os.environ 字典
print(os.environ['USER'])   # 如果不存在会抛出 KeyError

✍️ 设置环境变量

python 复制代码
os.environ['MY_VAR'] = 'hello'
# 注意:修改只对当前进程及其子进程有效,不会影响系统环境

🗑️ 删除环境变量

python 复制代码
del os.environ['MY_VAR']

6. ⚙️ 进程管理

os 模块提供了执行系统命令和创建子进程的功能。

🚀 执行系统命令

方法一:os.system()
python 复制代码
# 执行命令并返回退出码
ret = os.system('ls -l')   # Linux/macOS
ret = os.system('dir')     # Windows
print(ret)   # 0 表示成功

简单但功能有限,无法获取命令输出。

方法二:os.popen()(不推荐)
python 复制代码
with os.popen('ls -l') as f:
    output = f.read()
    print(output)

更现代的方式是使用 subprocess 模块,推荐掌握。

👶 创建子进程

os.fork() 仅在 Unix 系统上可用,用于创建子进程(复制当前进程)。在 Windows 上不可用,因此一般使用 multiprocessing 模块。

🆔 获取进程ID和父进程ID

python 复制代码
pid = os.getpid()
ppid = os.getppid()   # 仅在 Unix 上有效

7. 🔐 权限和文件属性

📊 文件状态(stat)

python 复制代码
stat_info = os.stat('file.txt')
print(stat_info.st_size)        # 文件大小(字节)
print(stat_info.st_mtime)       # 最后修改时间(时间戳)
print(stat_info.st_mode)        # 权限模式(八进制表示)

🔧 修改权限(Unix)

python 复制代码
# 设置文件为只读(八进制 0o444)
os.chmod('file.txt', 0o444)

# 设置文件为可读写(0o666)
os.chmod('file.txt', 0o666)

👥 文件所有者(Unix)

python 复制代码
# 获取 uid 和 gid
uid = os.stat('file.txt').st_uid
gid = os.stat('file.txt').st_gid

# 修改所有者(需要 root 权限)
os.chown('file.txt', uid, gid)

8. 💡 高级技巧与实战案例

🔄 临时文件与目录

使用 tempfile 模块可以安全地创建临时文件/目录:

python 复制代码
import tempfile

# 创建临时文件
with tempfile.NamedTemporaryFile(mode='w+') as f:
    f.write('hello')
    f.flush()
    print(f.name)   # 文件路径,退出时自动删除

# 创建临时目录
with tempfile.TemporaryDirectory() as tmpdir:
    print(tmpdir)   # 目录路径,退出时自动删除

📂 安全地创建目录

如果目录不存在则创建,存在则跳过:

python 复制代码
def ensure_dir(path):
    os.makedirs(path, exist_ok=True)

🧪 模拟文件系统(用于测试)

在单元测试中,可以使用 unittest.mock.patch 模拟文件系统,避免污染真实环境。

📝 遍历并处理文件

python 复制代码
def process_files(root_dir, extension):
    for root, dirs, files in os.walk(root_dir):
        for file in files:
            if file.endswith(extension):
                full_path = os.path.join(root, file)
                print(f"处理文件: {full_path}")
                # 在这里添加你的处理逻辑

🗑️ 删除旧的日志文件(保留最近 N 个)

python 复制代码
import glob

def delete_old_logs(log_dir, keep=5):
    logs = sorted(glob.glob(os.path.join(log_dir, '*.log')), key=os.path.getmtime)
    for log in logs[:-keep]:
        os.remove(log)

🔁 跨平台路径处理技巧

使用 os.path.join 而不是硬编码路径分隔符:

python 复制代码
# 错误:data_dir = 'data/' + filename
# 正确:
data_dir = os.path.join('data', filename)

🧩 获取用户主目录

python 复制代码
home = os.path.expanduser('~')
print(home)   # 如 '/home/username' 或 'C:\\Users\\username'

🏗️ 动态导入模块(结合路径)

python 复制代码
import importlib.util

def load_module_from_path(module_name, file_path):
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module

9. ⚙️ 性能与注意事项

  • 尽量使用 os.path.join:避免手动拼接路径分隔符,确保跨平台兼容。
  • 使用 with 语句 :对于文件操作,使用 with open(...) as f: 确保资源正确释放。
  • 小心 shutil.rmtree:删除非空目录前请确保没有重要数据,最好先备份。
  • 避免使用 os.system :推荐使用 subprocess 模块,提供更强大和安全的进程管理。
  • 路径中的空格 :使用 shlex.quotesubprocess 的列表参数方式避免空格问题。
  • 权限错误:在修改文件权限或删除系统文件时,确保进程拥有足够的权限。

10. 🎯 总结

通过本文,我们全面学习了 Python os 模块的:

  • ✅ 系统信息获取
  • ✅ 文件和目录操作(创建、删除、重命名、遍历)
  • ✅ 路径处理(os.path
  • ✅ 环境变量管理
  • ✅ 进程管理
  • ✅ 权限与文件属性
  • ✅ 实战案例

os 模块是 Python 与操作系统交互的核心工具,掌握它将极大提升你在文件管理、脚本编写、系统运维等领域的开发效率。

最后提醒:在编写涉及系统操作的代码时,一定要谨慎测试,特别是涉及删除、修改权限等破坏性操作时,建议先在临时环境中验证。

如果在使用过程中遇到问题,欢迎在评论区留言交流。感谢阅读,我们下篇见! 🚀

相关推荐
我是大猴子2 小时前
事务失效的几种情况以及是为什么(详解)
java·开发语言
武藤一雄2 小时前
C#:nameof 运算符全指南
开发语言·microsoft·c#·.net·.netcore
带娃的IT创业者3 小时前
WeClaw_40_系统监控与日志体系:多层次日志架构与Trace追踪
java·开发语言·python·架构·系统监控·日志系统·链路追踪
Y001112363 小时前
JDBC原理
java·开发语言·数据库·jdbc
亓才孓3 小时前
【提示词五要素】
python·ai·prompt
财经资讯数据_灵砚智能3 小时前
全球财经资讯日报(夜间-次晨)2026年3月28日
大数据·人工智能·python·语言模型·ai编程
wertyuytrewm3 小时前
Java 异常|Java Exceptions
java·开发语言
水哥ansys3 小时前
Pyansys-PyMAPDL基本语法01-APDL原生命令流改写格式
python·二次开发·水哥ansys·pyansys·apdl
雪碧聊技术3 小时前
深入理解 Java GC:从“房间清洁工”到解决系统卡顿实战
java·开发语言