Python os 模块:系统操作的 “百宝箱”
目录
前言
一、文件与目录操作
1. 目录切换与获取
2. 目录与文件创建 / 删除
3. 文件与目录检查
二、路径处理(os.path 子模块)
1. 路径拼接与拆分
2. 扩展名与绝对路径
三、环境变量与系统信息
1. 环境变量操作
2. 系统信息
四、文件与目录遍历
1. 列出目录内容
2. 递归遍历目录树
五、文件权限与时间戳
1. 文件权限操作(Unix 系统)
2. 文件时间戳
六、安全与健壮的文件操作
1. 安全创建目录(避免目录已存在的错误)
2. 安全删除文件 / 目录
七、跨平台注意事项
路径分隔符:
系统差异:
总结
前言
在 Python 中,os
模块是与操作系统交互的核心工具,提供了文件操作、路径处理、进程管理等功能。本文将梳理os
模块的常用方法,帮你高效处理系统相关任务。
一、文件与目录操作
1. 目录切换与获取
方法 | 功能描述 | 示例 |
---|---|---|
os.getcwd() | 获取当前工作目录路径 | print(os.getcwd()) → '/home/user/project' |
os.chdir(path) | 切换当前工作目录 | os.chdir('/tmp') → 切换到/tmp目录 |
2. 目录与文件创建 / 删除
方法 | 功能描述 | 示例 |
---|---|---|
os.mkdir(path) | 创建单层目录(目录已存在则报错) | os.mkdir('new_dir') → 创建new_dir目录 |
os.makedirs(path) | 递归创建多层目录(自动创建父目录) | os.makedirs('a/b/c') → 创建a/b/c目录树 |
os.rmdir(path) | 删除空目录(目录非空则报错) | os.rmdir('empty_dir') → 删除空目录 |
os.remove(path) | 删除文件 | os.remove('test.txt') → 删除test.txt |
os.removedirs(path) | 递归删除空目录(从子目录向上删) | os.removedirs('a/b/c') → 若a/b/c均为空,逐级删除 |
3. 文件与目录检查
方法 | 功能描述 | 示例 |
---|---|---|
os.path.exists(path) | 判断路径(文件或目录)是否存在 | os.path.exists('test.txt') → True/False |
os.path.isfile(path) | 判断路径是否为文件 | os.path.isfile('test.txt') → True |
os.path.isdir(path) | 判断路径是否为目录 | os.path.isdir('/tmp') → True |
os.path.getsize(path) | 获取文件大小(字节) | os.path.getsize('test.txt') → 1024 |
二、路径处理(os.path 子模块)
1. 路径拼接与拆分
方法 | 功能描述 | 示例 |
---|---|---|
os.path.join(path1, path2, ...) | 智能拼接路径(自动处理分隔符) | os.path.join('/tmp', 'a', 'b.txt') → '/tmp/a/b.txt' |
os.path.split(path) | 将路径拆分为 (目录,文件名) 元组 | os.path.split('/tmp/a/b.txt') → ('/tmp/a', 'b.txt') |
os.path.dirname(path) | 获取路径中的目录部分 | os.path.dirname('/tmp/a/b.txt') → '/tmp/a' |
os.path.basename(path) | 获取路径中的文件名部分 | os.path.basename('/tmp/a/b.txt') → 'b.txt' |
2. 扩展名与绝对路径
方法 | 功能描述 | 示例 |
---|---|---|
os.path.splitext(path) | 拆分文件名与扩展名 | os.path.splitext('a/b.txt') → ('a/b', '.txt') |
os.path.abspath(path) | 获取绝对路径 | os.path.abspath('test.txt') → '/home/user/test.txt' |
os.path.relpath(path, start) | 获取相对路径 | os.path.relpath('/tmp/a', '/tmp') → 'a' |
三、环境变量与系统信息
1. 环境变量操作
方法 | 功能描述 | 示例 |
---|---|---|
os.environ | 获取当前环境变量字典 | print(os.environ['PATH']) → '/usr/bin:/bin:...' |
os.getenv(key, default=None) | 获取指定环境变量值(不存在则返回默认值) | os.getenv('HOME', '/tmp') → '/home/user' |
os.putenv(key, value) | 设置环境变量(不推荐,建议用 os.environ) | os.environ['MY_VAR'] = '123' → 设置环境变量 |
2. 系统信息
方法 | 功能描述 | 示例 |
---|---|---|
os.name | 获取操作系统类型('posix', 'nt' 等) | print(os.name) → 'posix' (Linux/Mac) |
os.system(command) | 执行系统命令(返回命令退出状态码) | os.system('ls -l') → 执行ls -l命令 |
os.getpid() | 获取当前进程 ID | print(os.getpid()) → 12345 |
os.getuid() | 获取当前用户 ID(Unix 系统) | print(os.getuid()) → 1000 |
os.getgid() | 获取当前用户组 ID(Unix 系统) | print(os.getgid()) → 1000 |
四、文件与目录遍历
1. 列出目录内容
方法 | 功能描述 | 示例 |
---|---|---|
os.listdir(path='.') | 返回目录下的所有文件和目录名列表 | os.listdir('/tmp') → ['a', 'b.txt', 'c.log'] |
os.scandir(path='.') | 返回迭代器(含文件 / 目录信息对象) | with os.scandir('.') as entries: ... |
2. 递归遍历目录树
# os.walk(top_dir):返回三元组 (目录路径, 子目录名列表, 文件名列表) 的生成器
for root, dirs, files in os.walk('/home/user'):for file in files:print(os.path.join(root, file)) # 打印所有文件的完整路径
五、文件权限与时间戳
1. 文件权限操作(Unix 系统)
方法 | 功能描述 | 示例 |
---|---|---|
os.chmod(path, mode) | 修改文件权限(如 0o755 表示 rwxr-xr-x) | os.chmod('script.sh', 0o755) → 赋予执行权限 |
os.chown(path, uid, gid) | 修改文件所有者和组(需 root 权限) | os.chown('file.txt', 1000, 1000) → 改为用户1000 |
2. 文件时间戳
方法 | 功能描述 | 示例 |
---|---|---|
os.path.getatime(path) | 获取文件最后访问时间(时间戳) | print(os.path.getatime('test.txt')) → 1620000000.0 |
os.path.getmtime(path) | 获取文件最后修改时间(时间戳) | print(os.path.getmtime('test.txt')) → 1620000001.0 |
os.path.getctime(path) | 获取文件创建时间(Unix 为 inode 更改时间) | print(os.path.getctime('test.txt')) → 1620000002.0 |
六、安全与健壮的文件操作
1. 安全创建目录(避免目录已存在的错误)
# 方法1:先检查后创建
if not os.path.exists('new_dir'):os.mkdir('new_dir')# 方法2:用exist_ok参数(Python 3.2+)
os.makedirs('a/b/c', exist_ok=True) # 目录已存在也不报错
2. 安全删除文件 / 目录
# 安全删除文件(不存在也不报错)
try:os.remove('test.txt')
except FileNotFoundError:pass# 递归删除目录(等价于rm -rf)
import shutil
shutil.rmtree('dir_to_delete')
七、跨平台注意事项
-
路径分隔符:
- Windows 使用反斜杠
\
,Unix/Linux/Mac 使用正斜杠/
。 - 推荐用
os.path.join()
自动处理,避免硬编码:# 正确:跨平台兼容 path = os.path.join('data', 'file.txt') # Linux: 'data/file.txt',Windows: 'data\\file.txt'# 错误:Windows不兼容 path = 'data/file.txt'
- Windows 使用反斜杠
-
系统差异:
os.system()
执行的命令可能因系统而异(如 Windows 的dir
vs Unix 的ls
)。- 文件权限、用户 ID 等概念在 Windows 和 Unix 上差异较大,需谨慎使用。
总结
os
模块是 Python 与操作系统交互的桥梁,掌握其常用方法能大幅提升文件处理、系统管理的效率。本文覆盖了核心功能:
- 文件与目录操作:创建、删除、检查
- 路径处理:拼接、拆分、获取绝对路径
- 环境变量与系统信息:获取环境变量、执行系统命令
- 遍历目录树:递归查找文件和目录
- 文件权限与时间戳:修改权限、获取时间信息
建议收藏本文作为速查表,遇到系统相关操作时优先查阅os
模块,避免重复造轮子。