Python os 模块与路径从基础到实战应用
作者:qwerty12ljhxjdj
在 Python 开发中,文件和目录的操作是必不可少的技能。无论是数据处理、日志记录还是程序配置,都需要与文件系统交互。Python 的os模块和os.path子模块提供了丰富的接口,能够轻松实现目录创建、文件删除、路径处理等功能。本文将结合实例代码,详细讲解这些模块的核心用法。
一、路径基础:理解路径表示方式
在开始操作文件系统前,首先需要掌握路径的表示方法:
./:表示当前目录(即运行脚本所在的目录)../:表示上一级目录- 不同操作系统的路径分隔符不同(Windows 用
\,Linux/macOS 用/),可通过os.sep获取当前系统的分隔符
二、os 模块核心功能:目录与文件操作
os模块提供了直接与操作系统交互的功能,涵盖目录创建、查看、删除等常用操作。
1. 获取当前工作目录与路径分隔符
import os # 获取当前工作目录(绝对路径) print(os.getcwd()) # 示例输出:C:\project\demo # 获取当前系统的路径分隔符(Windows为\,Linux/macOS为/) print(os.sep) # 示例输出:\(Windows系统)
2. 目录创建:os.makedirs()
os.makedirs()支持递归创建目录(即同时创建多级目录),无需手动逐级创建父目录。
# 递归创建单级子目录
os.makedirs('./data/sub3') # 在当前目录创建data目录,再在其中创建sub3目录
# 递归创建多级子目录
os.makedirs('./data/b3/c5') # 创建data/b3/c5三级目录注意:如果目录已存在,再次调用会报错。可添加exist_ok=True参数避免错误:
os.makedirs('./data/sub3', exist_ok=True) # 目录存在时不报错3. 目录查看:os.listdir()与os.walk()
(1)os.listdir():查看单层目录
返回指定目录下的所有子目录和文件(仅显示一级,不递归)。
# 查看./data目录下的内容
print(os.listdir('./data'))
# 示例输出:['sub3', 'b3'](假设data目录下有这两个子目录)(2)os.walk():递归遍历目录
os.walk()是一个生成器,可递归遍历目录树,返回每个目录的三元组(当前目录路径, 子目录列表, 文件列表)。
# 递归遍历./data目录
gen = os.walk('./data')
# 第一次调用next():返回当前目录(data)的信息
print(next(gen))
# 示例输出:('./data', ['sub3', 'b3'], [])
# 第二次调用next():返回第一个子目录(sub3)的信息
print(next(gen))
# 示例输出:('./data/sub3', [], [])
# 第三次调用next():返回第二个子目录(b3)的信息
print(next(gen))
# 示例输出:('./data/b3', ['c5'], [])实战:收集目录下所有文件名称
# 初始化文件列表
all_files = []
# 遍历所有目录,收集文件
for root, dirs, files in os.walk('./data'):
all_files.extend(files) # 将当前目录的文件添加到列表
print(all_files) # 输出所有文件名称(如['111.py', '6.py'])4. 目录与文件删除
(1)删除文件:os.remove()
# 先判断文件是否存在,避免报错
if os.path.exists('data/b3/c5/111.py'):
os.remove('data/b3/c5/111.py') # 删除指定文件(2)删除空目录:os.rmdir()与os.removedirs()
os.rmdir():仅删除空的叶子目录(目录内无文件和子目录)。os.removedirs():递归删除空目录(从最深层开始,直到遇到非空目录为止)。
# 删除叶子目录(必须为空)
if os.path.exists('data/sub3/cc'):
os.rmdir('data/sub3/cc')
# 递归删除空目录(如删除c5后,若b3为空则继续删除b3)
if os.path.exists('data/b3/c5'):
os.removedirs('data/b3/c5')注意:如果目录非空(包含文件或子目录),删除会报错。删除非空目录需使用shutil.rmtree()(需导入shutil模块)。
三、os.path 模块:路径处理工具
os.path模块提供了一系列路径处理函数,解决不同操作系统路径格式差异的问题,确保路径操作跨平台兼容。
1. 判断路径类型
os.path.isdir(path):判断是否为目录。os.path.isfile(path):判断是否为文件。
import os.path
# 判断是否为目录
print(os.path.isdir('./data/sub3/test')) # 输出:False(假设test不存在)
# 判断是否为文件
print(os.path.isfile('./data/sub3/6.py')) # 输出:True(假设文件存在)2. 获取文件大小
os.path.getsize(path)返回文件的大小(单位:字节)。
# 获取文件大小
print(os.path.getsize('./data/sub3/6.py')) # 示例输出:1024(表示1024字节)3. 路径分割与拼接
os.path.split(path):将路径分割为(目录部分, 文件名)。os.path.join(path1, path2, ...):拼接多个路径片段,自动使用当前系统的分隔符。
# 分割路径
print(os.path.split('./data/sub3/6.py'))
# 输出:('./data/sub3', '6.py')
# 拼接路径
print(os.path.join(r'.\data\sub3', '6.py'))
# 输出:.\data\sub3\6.py(Windows系统)
# 或 ./data/sub3/6.py(Linux/macOS系统)优势:os.path.join()会自动适配系统分隔符,避免手动写死/或\导致的跨平台问题。
四、实战场景与最佳实践
- 常见应用场景:
- 日志文件管理:创建按日期分类的日志目录(如
./logs/2025-07)。 - 数据备份:遍历指定目录,复制或压缩所有文件。
- 程序初始化:启动时创建必要的配置目录(如
./config、./cache)。
- 日志文件管理:创建按日期分类的日志目录(如
- 最佳实践:
- 路径操作优先使用
os.path模块,避免硬编码分隔符(如/或\)。 - 删除文件 / 目录前务必检查是否存在(用
os.path.exists()),避免报错。 - 递归遍历目录时,使用
os.walk()的生成器特性,减少内存占用。 - 处理大型目录时,结合
try-except捕获权限不足等异常:
- 路径操作优先使用
try:
os.makedirs('./data/sub3')
except PermissionError:
print("无权限创建目录")五、总结
os和os.path模块是 Python 文件系统操作的核心工具,通过本文的学习,你已掌握:
- 目录的创建、查看、删除(
os.makedirs()、os.walk()、os.remove()等)。 - 路径的判断、分割、拼接(
os.path.isdir()、os.path.join()等)。 - 跨平台路径处理的最佳实践。
到此这篇关于Python os 模块与路径从基础到实战应用的文章就介绍到这了,更多相关python os模块路径内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
