Python os 模块与路径从基础到实战应用

 更新时间:2025年08月22日 16:07:51   作者:qwerty12ljhxjdj  
本文详解Python中os模块与路径处理,涵盖目录创建、遍历、删除及文件操作,提供日志管理、数据备份等实战案例,强调跨平台兼容与异常处理最佳实践,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

在 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("无权限创建目录")

五、总结

osos.path模块是 Python 文件系统操作的核心工具,通过本文的学习,你已掌握:

  • 目录的创建、查看、删除(os.makedirs()os.walk()os.remove()等)。
  • 路径的判断、分割、拼接(os.path.isdir()os.path.join()等)。
  • 跨平台路径处理的最佳实践。

到此这篇关于Python os 模块与路径从基础到实战应用的文章就介绍到这了,更多相关python os模块路径内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python爬取你好李焕英豆瓣短评生成词云的示例代码

    Python爬取你好李焕英豆瓣短评生成词云的示例代码

    这篇文章主要介绍了Python爬取你好李焕英豆瓣短评生成词云,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • python3 字符串str和bytes相互转换

    python3 字符串str和bytes相互转换

    这篇文章主要介绍了python3 字符串str和bytes相互转换,在文件传输过程中,通常使用bytes格式的数据流,而代码中通常用str类型,因此str和bytes的相互转换就尤为重要,下文详细介绍需要的小伙伴可以参考一下
    2022-03-03
  • python 在指定范围内随机生成不重复的n个数实例

    python 在指定范围内随机生成不重复的n个数实例

    今天小编就为大家分享一篇python 在指定范围内随机生成不重复的n个数实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Python序列操作之进阶篇

    Python序列操作之进阶篇

    序列sequence是python中最基本的数据结构,本文是Python序列操作的进阶篇,本文先对序列做一个简单的概括,之后将详细讲解下关于序列的操作方法。文中通过示例代码介绍的很详细,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-12-12
  • Python实现的桶排序算法示例

    Python实现的桶排序算法示例

    这篇文章主要介绍了Python实现的桶排序算法,简单说明了桶排序的概念、原理及优缺点,并结合实例形式演示了Python实现桶排序的方法,需要的朋友可以参考下
    2017-11-11
  • Python Pexpect库自动化交互式进程控制的expect_list方法解析

    Python Pexpect库自动化交互式进程控制的expect_list方法解析

    Pexpect是一个Python库,为自动化和交互式进程控制提供了丰富的功能,而expect_list方法是其功能强大且灵活的一部分,将详细探讨如何使用这一方法,并提供多个示例来说明其应用场景和功能
    2024-01-01
  • python中常见的几种音频数据读取、保存方式总结

    python中常见的几种音频数据读取、保存方式总结

    Python是一种非常适合进行音频处理和音频分析的语言,因为它有许多强大的库可以使用,下面这篇文章主要给大家介绍了关于python中常见的几种音频数据读取、保存方式,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-06-06
  • Python实现批量下载文件的示例代码

    Python实现批量下载文件的示例代码

    下载文件是我们在日常工作中常常要做的一件事情,当我们需要从互联网上批量下载大量文件时,手动一个一个去下载显然不够高效,所以本文为大家介绍一下如何利用python批量下载文件吧
    2023-11-11
  • python实现换位加密算法的示例

    python实现换位加密算法的示例

    今天小编就为大家分享一篇python实现换位加密算法的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Python的装饰器用法学习笔记

    Python的装饰器用法学习笔记

    这篇文章主要介绍了Python的装饰器用法学习笔记,装饰器的使用是Python编程中的高级技巧,需要的朋友可以参考下
    2016-06-06

最新评论