OS

目录

Python osos.path 模块全面指南

os 模块是 Python 中与操作系统交互的核心,用于执行文件系统操作、路径处理、环境变量访问和进程管理等任务。

一、 核心:os.path 路径处理模块

这是 os 模块中使用最频繁的部分。

1. 路径构建与解析

函数 作用 示例与说明
os.path.join(path1[, path2, ...]) 智能地组合多个路径部分。 这是跨平台兼容性的关键。 os.path.join('folder', 'sub', 'file.txt')
在 Linux/macOS 返回 folder/sub/file.txt
在 Windows 返回 folder\sub\file.txt
os.path.abspath(path) 返回路径的绝对路径。 os.path.abspath(‘file.txt’) -> /home/user/file.txt
os.path.realpath(path) 返回规范化的绝对路径,解析所有符号链接。 abspath 更彻底。
os.path.relpath(path, start=os.curdir) 返回相对于 start 目录的相对路径。 os.path.relpath(‘/etc’, ‘/’) -> ‘etc’
os.path.normpath(path) 规范化路径,处理多余的 ... 和分隔符。 os.path.normpath(‘a//b/../c’) -> a/c
os.path.normcase(path) 规范化路径的大小写。在 Windows 上会转为小写。

2. 路径拆分与获取信息

函数 作用 返回结果示例
os.path.split(path) 将路径分割为 (目录路径, 文件名) split(‘/a/b/c.txt’) -> (‘/a/b’, ‘c.txt’)
os.path.splitext(path) 将路径分割为 (根路径, 扩展名) splitext(‘file.tar.gz’) -> (‘file.tar’, ‘.gz’)
os.path.dirname(path) 返回路径中的目录部分(即 split() 的第一部分)。 dirname(‘/a/b/c.txt’) -> /a/b
os.path.basename(path) 返回路径中的文件名部分(即 split() 的第二部分)。 basename(‘/a/b/c.txt’) -> c.txt
os.path.commonpath(paths) 返回一个路径列表的公共父路径。
os.path.commonprefix(paths) 返回一个字符串列表的最长公共前缀(已弃用,不用于路径)。

3. 路径检测与属性

函数 作用
os.path.exists(path) 路径(文件或目录)是否存在。
os.path.isfile(path) 是否是文件
os.path.isdir(path) 是否是目录
os.path.islink(path) 是否是符号链接
os.path.isabs(path) 是否是绝对路径
os.path.samefile(path1, path2) 两个路径名是否指向同一个文件。
os.path.getsize(path) 返回文件大小(字节)。
os.path.getmtime(path) 返回文件最后修改时间(时间戳)。
os.path.getatime(path) 返回文件最后访问时间。
os.path.getctime(path) 返回文件创建或元数据最后更改时间。

二、 文件和目录操作

1. 目录操作

函数 作用 说明
os.getcwd() 返回当前工作目录。
os.chdir(path) 改变当前工作目录。
os.listdir(path=’.’) 返回指定目录下的文件和子目录名列表。 不包括 ...
os.scandir(path=’.’) 返回一个包含 DirEntry 对象的迭代器。性能优于 listdir Python 3.5+,支持 with 语句。
os.mkdir(path, mode=0o777) 创建单级目录。 父目录必须存在。
os.makedirs(path, mode=0o777, exist_ok=False) 递归创建目录。 exist_ok=True 时,目录存在不报错。
os.rmdir(path) 删除目录。
os.removedirs(path) 递归删除空目录,直到非空目录为止。 使用需谨慎。
os.walk(top, topdown=True) 目录树生成器。递归遍历,在每层返回 (当前路径, [子目录列表], [文件列表]) 文件系统操作的瑞士军刀。

2. 文件操作

函数 作用
os.rename(src, dst) 重命名或移动文件/目录。
os.replace(src, dst) 原子性地重命名或移动文件(Python 3.3+)。
os.remove(path)os.unlink(path) 删除文件。
os.link(src, dst) 创建指向 src 的硬链接 dst
os.symlink(src, dst, target_is_directory=False) 创建指向 src 的符号链接 dst

三、 进程与环境管理

1. 环境变量

函数/属性 作用
os.environ 一个表示环境变量的 dict 对象。修改此字典会影响当前进程环境。
os.getenv(key, default=None) 获取环境变量值。
os.putenv(key, value) 设置环境变量(建议直接操作 os.environ)。
os.unsetenv(key) 删除环境变量。

2. 执行系统命令

函数 作用 说明
os.system(command) 在子 shell 中执行命令。返回命令的退出状态码。 简单,但功能有限(无法直接获取输出)。
os.popen(command, mode=’r’, buffering=-1) 执行命令并返回一个文件对象,通过它可读取命令输出或向其输入。 已被 subprocess 模块取代。

四、 其他实用功能

函数/属性 作用
os.name 操作系统类型:‘posix’(Linux/macOS),‘nt’(Windows),‘java’
os.sep 操作系统使用的路径分隔符(如 /\)。
os.linesep 当前平台的行终止符(如 \n\r\n)。
os.cpu_count() 返回系统的 CPU 核心数量。
os.urandom(size) 返回由操作系统随机源生成的、适合加密使用的 size 个字节。

关键建议

  1. 路径拼接:永远使用 os.path.join(),避免手动拼接字符串,以确保代码的跨平台兼容性。
  2. 目录遍历:优先使用 os.scandir(),它在获取文件类型信息时比 os.listdir() 更高效。
  3. 执行命令:对于复杂的命令交互,使用标准库的 subprocess 模块,它比 os.systemos.popen 更强大和安全。
  4. 检查存在性: os.path.exists() 存在竞态条件。更稳健的模式是“尝试操作,捕获异常”(EAFP)。