Python3 OS 文件/目录方法
Python3 OS 文件/目录方法
🎯 学习目标
掌握 Python os
模块中与文件和目录操作相关的常用函数,能够在 Windows 系统下使用 PyCharm 进行跨平台兼容的文件系统管理。理解如何创建、删除、遍历目录结构,并结合实际项目场景实现自动化文件处理。
🔑 核心重点
分类 | 内容 |
---|---|
文件操作 | 创建、重命名、删除文件 |
目录操作 | 创建目录、切换工作路径、列出目录内容 |
路径处理 | 使用 os.path 拼接、判断、获取文件信息 |
系统交互 | 获取当前进程信息、执行系统命令 |
实际应用场景 | 自动化脚本、日志清理、数据迁移、备份工具等 |
📚 详细讲解
一、导入 os 模块
import os
所有与操作系统交互的功能都通过 os
模块提供。
二、常见文件操作方法
✅ os.remove(file)
:删除文件
os.remove("temp.txt") # 删除指定文件
📌 若文件不存在会抛出 FileNotFoundError
,建议先检查是否存在。
✅ os.rename(src, dst)
:重命名或移动文件
os.rename("old_name.txt", "new_name.txt")
📌 可用于移动文件到其他目录:
os.rename("docs/report.txt", "backup/report.txt")
三、目录操作方法
✅ os.mkdir(path)
:创建单层目录
os.mkdir("my_folder")
📌 如果目录已存在,会抛出 FileExistsError
。
✅ os.makedirs(path)
:递归创建多层目录
os.makedirs("a/b/c") # 自动创建 a → a/b → a/b/c
✅ os.rmdir(path)
:删除空目录
os.rmdir("empty_folder")
📌 无法删除非空目录,需使用 shutil.rmtree()
(见拓展练习)
✅ os.listdir(path)
:列出目录内容
files = os.listdir(".") # 列出当前目录下的所有文件和子目录
print(files)
四、路径相关操作(推荐使用 os.path
)
✅ os.path.join()
:拼接路径(自动适配系统)
path = os.path.join("data", "2025", "file.txt")
print(path) # 输出:data\2025\file.txt (Windows)
✅ os.path.exists(path)
:判断路径是否存在
if os.path.exists("data"):
print("目录存在")
✅ os.path.isfile(path)
和 os.path.isdir(path)
if os.path.isfile("data.txt"):
print("这是一个文件")
✅ os.path.abspath(path)
:获取绝对路径
abs_path = os.path.abspath("data.txt")
print(abs_path)
✅ os.path.basename(path)
和 os.path.dirname(path)
print(os.path.basename("C:/project/data.txt")) # 输出 data.txt
print(os.path.dirname("C:/project/data.txt")) # 输出 C:/project
五、其他实用功能
✅ os.getcwd()
:获取当前工作目录
current_dir = os.getcwd()
print(current_dir)
✅ os.chdir(path)
:切换当前工作目录
os.chdir("my_project")
✅ os.system(command)
:执行系统命令(Windows)
os.system("notepad") # 打开记事本
✅ os.name
:查看操作系统类型
print(os.name) # Windows 输出 nt
⚠️ 注意事项
- 操作文件前务必确认文件/目录是否存在,避免异常
- 尽量使用
os.path
来处理路径,提高跨平台兼容性 - 删除目录时确保目录为空,否则使用
shutil.rmtree()
- 不要随意删除系统关键文件或目录
- 在脚本中执行系统命令时要注意安全性(如注入攻击)
🧪 实际案例分析
📌 场景:构建一个“日志文件清理器”
功能需求:
- 遍历
logs/
目录下的所有.log
文件 - 删除超过 7 天的旧日志文件
- 输出清理结果
示例代码:
import os
import time
log_dir = "logs"
now = time.time()
days_to_keep = 7
for filename in os.listdir(log_dir):
file_path = os.path.join(log_dir, filename)
if os.path.isfile(file_path) and filename.endswith(".log"):
file_age = now - os.path.getmtime(file_path)
if file_age > days_to_keep * 86400:
os.remove(file_path)
print(f"已删除过期日志:{filename}")
📌 说明:
os.path.getmtime(file_path)
返回文件最后修改时间戳86400
是一天的秒数- 该脚本适合定时任务中运行,保持日志目录整洁
🧩 拓展练习(动手实践)
- 编写程序,扫描指定目录并统计
.txt
文件数量。 - 创建一个“文件分类器”,根据扩展名将文件移动到不同子目录中。
- 实现一个“备份工具”,将指定目录复制到另一个位置,并记录日志。
- 编写脚本,批量重命名文件夹中的图片文件为统一格式(如 img_001.jpg)。
- 构建一个“磁盘清理助手”,查找并删除大于一定大小的临时文件。
📚 推荐阅读
- Python 官方文档 - os 模块
- 《流畅的 Python》第 9 章 - 文件 I/O
- 廖雪峰 Python 教程 - 操作系统接口
- 菜鸟教程 - Python OS 模块
- Real Python - Working with Files in Python
🧭 下一步建议
- 下一章学习内容:《Python3 shutil 模块:高级文件操作》
- 掌握复制、移动、压缩整个目录树的方法
- 学习使用
shutil.copytree()
、shutil.rmtree()
等高级函数 - 结合
os
和shutil
构建完整的文件管理系统
如果你希望我为你提供:
- Python OS 模块速查表 PDF(含函数+参数+示例)
- 更多实战项目练习题(如文件分类器、备份工具、磁盘清理器等)
- 视频教学资源推荐(中文讲解)
- 如何结合
logging
模块记录文件操作日志
欢迎随时告诉我 😊