Python进阶 - os模块 操作系统路径与目录操作

📅 2026/8/16 20:11:20
Python进阶 - os模块 操作系统路径与目录操作
大家好欢迎来到我的技术博客 在这里我会分享学习笔记、实战经验与技术思考力求用简单的方式讲清楚复杂的问题。 本文将围绕Python进阶这个话题展开希望能为你带来一些启发或实用的参考。 无论你是刚入门的新手还是正在进阶的开发者希望你都能有所收获文章目录 Python进阶os模块操作系统路径与目录操作 什么是 os 模块 路径操作os.path 模块详解 ✅ 1. os.path.join() —— 安全路径拼接✅ 2. os.path.abspath() —— 获取绝对路径✅ 3. os.path.dirname() 与 os.path.basename() —— 分离目录与文件名✅ 4. os.path.exists() 与 os.path.isfile() / os.path.isdir()✅ 5. os.path.splitext() —— 分离文件名与扩展名️ 目录操作创建、遍历与删除✅ 1. os.mkdir() 与 os.makedirs() —— 创建单层或多层目录✅ 2. os.listdir() —— 列出目录内容✅ 3. os.rmdir() 与 os.removedirs() —— 删除空目录✅ 4. shutil.rmtree() —— 强力删除目录推荐替代方案 遍历目录树os.walk() 的深度解析 文件属性查询os.stat() 与时间戳处理 跨平台路径处理最佳实践❌ 错误示范✅ 正确做法 Mermaid 图表目录结构可视化️ 实用脚本批量重命名文件 权限与安全性注意事项 总结os 模块核心能力一览 学习资源推荐✅ 结语掌握 os 模块让脚本更强大 Python进阶os模块操作系统路径与目录操作 在使用Python进行文件和目录管理时os模块是开发者最常接触的核心模块之一。它提供了丰富的功能来与操作系统交互尤其是在处理路径、目录创建、文件信息获取等方面表现得尤为强大。无论是开发脚本自动化任务还是构建复杂的文件管理系统掌握os模块的使用都至关重要。提示os模块是标准库的一部分无需额外安装即可直接使用。它跨平台兼容性良好支持Windows、macOS和Linux等主流操作系统。 什么是 os 模块os模块Operating System interface提供了一种统一的方式来访问操作系统服务。通过这个模块我们可以执行诸如获取当前工作目录创建、删除目录列出目录内容处理路径字符串如拼接、分割获取文件属性大小、权限、修改时间等这些功能对于编写可移植性强的脚本非常关键。例如一个在Windows上运行良好的路径拼接代码在Linux上可能因为反斜杠问题而失败。而os.path提供的函数能自动适配不同系统的路径分隔符。✅推荐实践永远不要手动拼接路径字符串如folder \\ file.txt而是使用os.path.join()来保证跨平台兼容性。 路径操作os.path 模块详解 ✅ 1.os.path.join()—— 安全路径拼接importos# 错误做法不推荐pathdata\\images\\photo.jpg# 正确做法推荐pathos.path.join(data,images,photo.jpg)print(path)# Windows: data\images\photo.jpg# Linux/macOS: data/images/photo.jpg优势自动根据操作系统选择正确的路径分隔符\或/避免因平台差异导致错误。✅ 2.os.path.abspath()—— 获取绝对路径importos relative_pathproject/config.pyabsolute_pathos.path.abspath(relative_path)print(absolute_path)# 输出示例/home/user/project/config.py Linux/Mac# C:\Users\user\project\config.py Windows用途当你需要将相对路径转换为绝对路径时非常有用尤其在读取配置文件或资源文件时。✅ 3.os.path.dirname()与os.path.basename()—— 分离目录与文件名importos file_path/home/user/docs/report.pdfdirectoryos.path.dirname(file_path)filenameos.path.basename(file_path)print(fDirectory:{directory})# /home/user/docsprint(fFilename:{filename})# report.pdf应用场景从文件路径中提取目录用于后续的文件夹操作。批量处理文件时按目录分类。✅ 4.os.path.exists()与os.path.isfile()/os.path.isdir()判断路径是否存在及类型importos pathexample.txtifos.path.exists(path):print(✅ 路径存在)ifos.path.isfile(path):print( 是一个文件)elifos.path.isdir(path):print( 是一个目录)else:print(❌ 路径不存在)注意os.path.exists()只判断路径是否存在于文件系统中但不会区分是文件还是目录。因此建议配合isfile()和isdir()使用。✅ 5.os.path.splitext()—— 分离文件名与扩展名importos filenamedocument_v2.pdfname,extos.path.splitext(filename)print(fName:{name})# document_v2print(fExtension:{ext})# .pdf实用场景批量重命名文件、按后缀分类、生成新文件名等。️ 目录操作创建、遍历与删除✅ 1.os.mkdir()与os.makedirs()—— 创建单层或多层目录importos# 单层创建如果父目录不存在会报错try:os.mkdir(new_folder)exceptFileExistsError:print( 目录已存在)# 多层创建推荐使用os.makedirs(project/data/raw/images,exist_okTrue)print(✅ 成功创建嵌套目录结构)⚠️exist_okTrue参数可防止目录已存在时报错是生产环境中的最佳实践。✅ 2.os.listdir()—— 列出目录内容importos# 获取当前目录下所有文件和子目录contentsos.listdir(.)foritemincontents:print(f{item}) 输出示例 README.md data/ scripts/ main.py技巧结合os.path.join()遍历子目录forroot,dirs,filesinos.walk(.):forfileinfiles:full_pathos.path.join(root,file)print(f{full_path})✅ 3.os.rmdir()与os.removedirs()—— 删除空目录importos# 只能删除空目录os.rmdir(empty_folder)# 仅当目录为空时有效# 递归删除整个目录树必须为空os.removedirs(nested/empty/dir)⚠️警告如果目录非空会抛出异常。若要删除非空目录应先清空内容。✅ 4.shutil.rmtree()—— 强力删除目录推荐替代方案虽然shutil模块不属于os但它是os的重要补充特别适合删除包含内容的目录。importshutil# 安全删除整个目录及其内容shutil.rmtree(temp_data,ignore_errorsTrue)print(️ 已成功删除 temp_data 目录及其所有子内容)✅ignore_errorsTrue表示即使某些文件无法删除也不中断程序适用于清理临时文件。 遍历目录树os.walk() 的深度解析os.walk()是一个强大的生成器函数能够递归遍历目录树返回(root, dirs, files)三元组。importosforroot,dirs,filesinos.walk(project):levelroot.replace(project,).count(os.sep)indent│ *levelprint(f{indent}{os.path.basename(root)})sub_indent│ *(level1)forfileinfiles:print(f{sub_indent}{file}) 输出效果模拟 project │ src │ │ main.py │ │ utils.py │ tests │ │ test_main.py │ README.md核心理解root当前遍历的目录路径dirs该目录下的子目录列表files该目录下的文件列表应用场景文件搜索如查找.log文件批量处理如压缩所有图片系统扫描如检查重复文件 文件属性查询os.stat() 与时间戳处理os.stat()返回文件的详细信息包括大小、权限、修改时间等。importosimporttime file_pathexample.txtstatsos.stat(file_path)print(f Size:{stats.st_size}bytes)print(f Modified:{time.ctime(stats.st_mtime)})print(f Created:{time.ctime(stats.st_ctime)})print(f Permissions:{oct(stats.st_mode)})常见字段说明字段含义st_size文件大小字节st_mtime最后修改时间秒级时间戳st_ctime创建时间部分系统st_mode文件权限模式 参考文档os.stat() 官方说明 跨平台路径处理最佳实践由于不同操作系统使用不同的路径分隔符我们必须谨慎处理路径字符串。❌ 错误示范# Windows风格危险pathdata\\images\\logo.png# Linux/macOS风格同样危险pathdata/images/logo.png✅ 正确做法importos# 推荐使用 os.path.join()pathos.path.join(data,images,logo.png)# 或者使用 pathlib更现代但不在 os 模块内frompathlibimportPath pathPath(data)/images/logo.png升级建议对于新项目考虑使用pathlib模块语法更直观、面向对象。 Mermaid 图表目录结构可视化下面是一个基于os.walk()实现的目录结构图用 Mermaid 语法表示projectsrctestsdataREADME.mdmain.pyutils.pymain.pytest_main.pyrawprocessedimage1.jpgimage2.pngresult.json 这个图表展示了典型的 Python 项目结构你可以将其嵌入 Markdown、Jupyter Notebook、Obsidian 等支持 Mermaid 渲染的工具中。小贴士在 VS Code 中安装“Markdown Preview Mermaid Support”插件即可实时渲染。️ 实用脚本批量重命名文件假设我们有一个文件夹里面全是IMG_001.jpg格式的照片想要统一改为photo_001.jpg。importosdefrename_images(folder_path):count1forfilenameinos.listdir(folder_path):iffilename.lower().endswith((.png,.jpg,.jpeg)):old_pathos.path.join(folder_path,filename)new_namefphoto_{count:03d}.jpgnew_pathos.path.join(folder_path,new_name)os.rename(old_path,new_path)print(f Renamed:{filename}→{new_name})count1# 调用函数rename_images(photos)✅输出示例 Renamed: IMG_001.jpg → photo_001.jpg Renamed: IMG_002.jpg → photo_002.jpg ...安全建议操作前备份原始文件或添加确认逻辑。 权限与安全性注意事项在处理文件和目录时务必注意权限问题。importos path/etc/passwd# 系统文件普通用户无权访问try:os.access(path,os.R_OK)# 检查是否可读print(✅ 可读)exceptPermissionError:print( 无读取权限)⚠️切记不要在未验证权限的情况下尝试读写敏感路径否则可能导致程序崩溃或安全漏洞。 总结os 模块核心能力一览功能函数说明路径拼接os.path.join()安全跨平台绝对路径os.path.abspath()将相对路径转为绝对路径分离目录与文件os.path.dirname(),os.path.basename()便于路径分析判断存在性os.path.exists()基础校验判断类型os.path.isfile(),os.path.isdir()区分文件与目录分离扩展名os.path.splitext()处理文件后缀创建目录os.makedirs()支持多层创建删除目录shutil.rmtree()删除非空目录遍历目录os.walk()递归遍历获取文件信息os.stat()获取大小、时间等 学习资源推荐 Python官方文档 - os 模块 Real Python - Working with Files and Directories️ GeeksforGeeks - Python os Module Tutorial YouTube: Python os module tutorial (5 min)学习建议动手写几个脚本比如“查找大于1MB的文件”、“备份指定目录”、“清理临时文件”将理论转化为实战。✅ 结语掌握 os 模块让脚本更强大os模块虽看似简单却是 Python 文件系统操作的基石。它不仅帮助我们实现基本的路径和目录管理还为自动化、数据处理、系统维护等高级应用打下坚实基础。记住三个关键词安全永远使用os.path.join()避免硬编码路径兼容跨平台代码离不开os模块的智能处理健壮加异常处理确保程序稳定运行 从今天开始用os模块写出更专业、更可靠的 Python 脚本小挑战写一个脚本自动扫描当前目录找出所有.py文件并列出它们的大小和最后修改时间。importosimporttimeforroot,_,filesinos.walk(.):forfileinfiles:iffile.endswith(.py):pathos.path.join(root,file)statos.stat(path)sizestat.st_size mtimetime.ctime(stat.st_mtime)print(f{file}| Size:{size}B | Modified:{mtime}) 你已经迈出了进阶的第一步✨愿你在 Python 的世界里每一步都走得稳健每一行代码都充满智慧。 感谢你读到这里 技术之路没有捷径但每一次阅读、思考和实践都在悄悄拉近你与目标的距离。 如果本文对你有帮助不妨 点赞、收藏、分享给更多需要的朋友 欢迎在评论区留下你的想法、疑问或建议我会一一回复我们一起交流、共同成长 关注我不错过下一篇干货我们下期再见✨