跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

Python 文件路径操作指南:遍历、过滤与文件管理

系统介绍了 Python 中处理文件路径的核心方法。涵盖使用 os 模块和 pathlib 库进行目录遍历、文件筛选、重命名、移动及删除等操作。内容包含递归搜索子目录、按后缀名过滤、跨平台路径拼接以及异常处理机制,旨在帮助开发者高效完成文件管理系统任务。

云朵棉花糖发布于 2025/2/7更新于 2026/7/2443 浏览
Python 文件路径操作指南:遍历、过滤与文件管理

Python 文件路径操作指南:遍历、过滤与文件管理

在 Python 编程过程中,我们经常需要处理文件系统相关的任务。例如获取某一个目录下的所有文件、筛选特定后缀名的文件、获取文件所在的文件夹路径、替换文件名、删除文件或移动文件等。本文系统总结了这些方法,涵盖 os 模块和现代 pathlib 库的使用,并包含错误处理与跨平台兼容性建议。

1. 获取文件夹下的所有文件路径

1.1 使用 os.listdir 获取直接子项

os.listdir() 是最基础的方法,可以获取指定文件夹下的所有文件和子文件夹名称(不包含完整路径)。

import os

dir_path = r'C:\Users\User\Desktop\周汇报'
file_ls = os.listdir(dir_path)  # 获取所有文件及文件夹名称
print(file_ls)

运行结果会返回一个字符串列表,其中既包含文件名,也包含子文件夹名。

若要获取完整路径,可结合 os.path.join() 使用:

file_ls = [os.path.join(dir_path, file) for file in file_ls]
print(file_ls)

注意:此方法仅能获取当前层级的内容,无法递归进入子文件夹。

1.2 使用 os.walk 递归遍历

如果需要获取根目录下及其所有子文件夹中的文件,推荐使用 os.walk()。它返回三个参数:根目录 (root)、该目录下的子文件夹列表 (dirs)、该目录下的文件列表 (files)。

path = r'C:\Users\User\Desktop\周汇报'
for root, dirs, files in os.walk(path):
    print(f"当前目录:{root}")
    print(f"子文件夹:{dirs}")
    print(f"文件:{files}")

os.walk 会自动向下遍历。若需收集所有文件路径:

path = r'C:\Users\User\Desktop\周汇报'
all_files = []
for root, dirs, files in os.walk(path):
    for file in files:
        full_path = os.path.join(root, file)
        all_files.append(full_path)

()
print
f"共找到 {len(all_files)} 个文件"

2. 现代方案:使用 pathlib 库

Python 3.4+ 引入了 pathlib 模块,基于面向对象的方式处理路径,代码更简洁且可读性更强。

2.1 基本用法

from pathlib import Path

p = Path(r'C:\Users\User\Desktop\周汇报')
print(p.exists())       # 检查是否存在
print(p.is_dir())       # 是否为目录
print(p.name)           # 文件名或目录名

2.2 递归获取所有文件

Path.glob() 和 Path.rglob() 是强大的通配符工具。

from pathlib import Path

# rglob 递归搜索所有匹配的文件
p = Path(r'C:\Users\User\Desktop\周汇报')
for file in p.rglob('*'):
    if file.is_file():
        print(file)

2.3 按后缀名筛选

# 获取所有 .txt 文件
txt_files = list(p.rglob('*.txt'))
# 获取所有 .docx 文件
docx_files = list(p.rglob('*.docx'))

3. 获取与处理文件后缀名

3.1 分割路径与后缀

使用 os.path.splitext() 将路径分为两部分:主文件名和后缀名。

import os

file = r'C:\Users\User\Desktop\周汇报\第六周总结.pptx'
name, ext = os.path.splitext(file)
print(f"主名:{name}, 后缀:{ext}")  # 输出:主名:...\第六周总结,后缀:.pptx

3.2 判断后缀名

利用字符串的 endswith() 方法判断路径是否以特定字符结尾。

path = r'C:\Users\User\Desktop\周汇报\test.docx'
if path.endswith('.docx'):
    print("这是一个 Word 文档")

4. 修改文件名与移动文件

4.1 重命名文件

使用 os.rename(old_name, new_name) 进行重命名。两个参数均为完整路径。

import os

old_path = r'C:\Users\User\Desktop\周汇报\旧文件.txt'
new_path = r'C:\Users\User\Desktop\周汇报\新文件.txt'
os.rename(old_path, new_path)

4.2 移动文件

使用 shutil 模块的 move() 函数。如果目标目录不存在,可能会报错,需确保目标路径存在。

import shutil

src = r'C:\Users\User\Desktop\源文件.txt'
dst = r'C:\Users\User\Desktop\备份\目标文件.txt'
shutil.move(src, dst)

5. 删除与移除文件夹

5.1 删除文件

使用 os.remove(path) 删除单个文件。如果文件被占用或权限不足,会抛出异常。

import os
try:
    os.remove(r'C:\Users\User\Desktop\临时文件.tmp')
    print("文件已删除")
except FileNotFoundError:
    print("文件不存在")
except PermissionError:
    print("无权限删除")

5.2 删除空文件夹

使用 os.rmdir(path) 只能删除空文件夹,否则报错。

5.3 删除非空文件夹

使用 shutil.rmtree(path) 可递归删除整个目录树。

import shutil

folder_path = r'C:\Users\User\Desktop\要删除的文件夹'
shutil.rmtree(folder_path)

6. 获取文件所在文件夹

使用 os.path.dirname(path) 或 pathlib.Path.parent 获取父目录路径。

import os

path = r'C:\Users\User\Desktop\周汇报\第 001 周总结.docx'
parent_dir = os.path.dirname(path)
print(parent_dir)
# 输出:C:\Users\User\Desktop\周汇报

7. 最佳实践与注意事项

7.1 跨平台兼容性

Windows 使用反斜杠 \,Linux/Mac 使用正斜杠 /。建议使用 os.path.join() 或 pathlib 自动处理分隔符。

import os
path = os.path.join('data', 'reports', 'report.pdf')
# 在 Windows 上生成 data\reports\report.pdf
# 在 Linux 上生成 data/reports/report.pdf

7.2 异常处理

文件操作极易受权限、路径不存在等因素影响,务必使用 try-except 块包裹关键逻辑。

7.3 性能优化

在处理大量文件时,避免在循环中频繁调用 IO 操作。可使用生成器表达式或批量处理策略。对于超大目录,os.walk 比递归 listdir 更高效。

8. 总结

通过本文的学习,我们掌握了以下核心技能:

  1. 遍历:使用 os.listdir 获取单层,os.walk 或 pathlib.rglob 获取递归。
  2. 筛选:利用 splitext 和 endswith 过滤特定类型文件。
  3. 管理:掌握 rename, move, remove, rmtree 等文件操作命令。
  4. 安全:学会使用 pathlib 提高代码可读性,并通过异常处理增强程序健壮性。

系统性掌握这些方法有助于编写高效的文件管理系统脚本,节约开发时间。在实际项目中,建议优先使用 pathlib 模块以获得更好的跨平台支持。

目录

  1. Python 文件路径操作指南:遍历、过滤与文件管理
  2. 1. 获取文件夹下的所有文件路径
  3. 1.1 使用 os.listdir 获取直接子项
  4. 1.2 使用 os.walk 递归遍历
  5. 2. 现代方案:使用 pathlib 库
  6. 2.1 基本用法
  7. 2.2 递归获取所有文件
  8. rglob 递归搜索所有匹配的文件
  9. 2.3 按后缀名筛选
  10. 获取所有 .txt 文件
  11. 获取所有 .docx 文件
  12. 3. 获取与处理文件后缀名
  13. 3.1 分割路径与后缀
  14. 3.2 判断后缀名
  15. 4. 修改文件名与移动文件
  16. 4.1 重命名文件
  17. 4.2 移动文件
  18. 5. 删除与移除文件夹
  19. 5.1 删除文件
  20. 5.2 删除空文件夹
  21. 5.3 删除非空文件夹
  22. 6. 获取文件所在文件夹
  23. 输出:C:\Users\User\Desktop\周汇报
  24. 7. 最佳实践与注意事项
  25. 7.1 跨平台兼容性
  26. 在 Windows 上生成 data\reports\report.pdf
  27. 在 Linux 上生成 data/reports/report.pdf
  28. 7.2 异常处理
  29. 7.3 性能优化
  30. 8. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Stable Diffusion + kohya_ss 的安装教程
  • PRIDE-PPPAR:多系统 GNSS 精密定位开源解决方案
  • 逐字回复怎么实现?大模型 Stream 流式输出在 LangChain 中的实践
  • IntelliJ IDEA 三大 AI 编程插件实测:Copilot、TRAE 与灵码深度对比
  • C++ 笔试刷题实战:偶数重组、排队方案与二叉树路径和
  • 无人机三维路径规划:A*, RRT 与 APF 算法对比及 MATLAB 实现
  • 基于 Z-Image 的瑜伽女孩 AI 绘画模型部署与使用指南
  • 利用 AI 工具加速 Simulink 建模与仿真的实践
  • 4x Tesla P40 上训练 Llama-3.3-70B 大模型指南
  • OpenAI Whisper 语音识别模型入门与实战指南
  • CarelessWhisper: 将 Whisper 转变为因果流式模型
  • 在 Linux 服务器上部署 Codex AI IDE
  • 飞书 OpenClaw 机器人 HTTP 401 认证失败排查指南
  • ChatGPT 如何利用结构化方法实现高效信息管理
  • Linux Ubuntu 22.04 安装实时内核补丁 PREEMPT_RT
  • 漫画角色 Prompt 生成实战:Stable Diffusion WebUI 语法
  • Fooocus 部署实践:从本地手动配置到云端一键启用
  • IntelliJ IDEA 切换 JDK 版本完整教程
  • Kimi Code 发布 CLI 工具,重塑编程工作流
  • Unity-MCP 使用指南:让 AI 接管游戏开发

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online