Python OS 文件/目录方法(超详细)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
在 Python 开发中,文件和目录操作是许多项目的基础功能之一。无论是数据处理、日志管理还是自动化任务,都离不开对操作系统底层文件系统的灵活控制。本文将系统性地介绍 Python 中 os
模块的核心功能,通过循序渐进的案例演示,帮助开发者掌握文件与目录的创建、删除、遍历等实用技能。文章内容兼顾基础与进阶知识点,特别适合编程初学者构建知识框架,同时也能为中级开发者提供更深入的理解视角。
一、OS 模块的入门认知:操作系统接口的桥梁
Python 的 os
模块是连接 Python 脚本与操作系统功能的桥梁,它提供了对文件系统、进程管理、环境变量等底层操作的封装。我们可以将 os
模块想象成一位“系统导航员”,它能帮助开发者在不同操作系统(如 Windows、Linux、macOS)间实现跨平台的文件操作。
1.1 模块的导入与基础概念
要使用 os
模块,只需通过以下语句导入:
import os
该模块包含两大核心功能类别:
- 文件/目录操作:如创建、删除、重命名等
- 环境变量与进程控制:如获取当前工作目录、修改环境变量等
1.2 第一个案例:查看当前工作目录
通过 os.getcwd()
方法可以获取当前脚本的执行路径,类似我们双击文件时所在的文件夹位置:
current_path = os.getcwd()
print("当前工作目录:", current_path)
这个方法常用于验证脚本的执行环境,避免因路径错误导致的文件读写失败。
二、目录操作:文件系统的“建造师”
目录操作是文件管理的基础,os
模块提供了对目录的创建、删除、遍历等核心功能。
2.1 创建目录:os.mkdir()
os.mkdir("新建文件夹")
此方法会直接在当前路径下创建一个名为“新建文件夹”的目录。需要注意的是,若父目录不存在,则会抛出异常。
比喻说明:这就像在你的电脑桌面上新建一个文件夹,但无法一次性创建多级嵌套文件夹。
2.2 创建多级目录:os.makedirs()
os.makedirs("a/b/c")
此方法可以递归创建多级目录,相当于在桌面上直接创建 a → b → c
这样的三层文件夹结构。
2.3 删除目录:os.rmdir()
os.rmdir("新建文件夹")
此方法仅能删除空目录,若目录非空则会报错。若需强制删除非空目录,需结合 shutil
模块的 rmtree()
方法。
2.4 列出目录内容:os.listdir()
files = os.listdir(".")
for file in files:
print(file)
此方法会返回当前目录(.
表示当前路径)下的所有文件和子目录名称列表。
三、文件操作:数据的“读写者”
文件操作包括创建、读写、删除等核心功能,是处理数据存储的核心手段。
3.1 创建文件:open()
与 with
语句
with open("test.txt", "w") as f:
f.write("Hello, OS Module!")
通过 open()
函数并指定 "w"
模式(写入模式),可以创建新文件或覆盖已有文件内容。使用 with
语句能确保文件正确关闭,避免资源泄漏。
3.2 读取文件内容:os.path
模块配合
file_path = "test.txt"
if os.path.exists(file_path): # 先验证文件是否存在
with open(file_path, "r") as f:
content = f.read()
print("文件内容:", content)
else:
print("文件不存在!")
此案例结合了 os.path.exists()
方法,确保在读取前验证文件存在性,避免程序崩溃。
3.3 删除文件:os.remove()
os.remove("test.txt")
此方法用于删除指定路径的文件,若文件不存在或权限不足会导致错误。
四、路径处理:系统导航的“指南针”
路径操作是文件管理的基础,os.path
子模块提供了丰富的路径处理工具。
4.1 拼接路径:os.path.join()
file_path = os.path.join("目录", "子目录", "文件.txt")
print(file_path) # 输出:目录\子目录\文件.txt(Windows)或目录/子目录/文件.txt(Linux)
此方法能自动适配不同操作系统的路径分隔符,避免手动拼接导致的兼容性问题。
4.2 分割路径:os.path.split()
full_path = "/home/user/file.txt"
dir_name, base_name = os.path.split(full_path)
print("目录部分:", dir_name) # 输出:/home/user
print("文件名:", base_name) # 输出:file.txt
此方法可将完整路径拆分为目录和文件名两部分,便于结构化处理。
4.3 获取扩展名:os.path.splitext()
file_name = "report.xlsx"
name, ext = os.path.splitext(file_name)
print("文件名:", name) # 输出:report
print("扩展名:", ext) # 输出:.xlsx
此功能常用于文件类型过滤或重命名操作。
五、高级技巧:环境变量与权限管理
5.1 环境变量操作
通过 os.environ
可以访问或修改系统环境变量:
print("用户主目录:", os.environ.get("HOME"))
os.environ["MY_VAR"] = "test_value"
此功能在自动化脚本中可用于动态配置运行环境。
5.2 文件属性查询
file_info = os.stat("test.txt")
print("文件大小:", file_info.st_size, "字节")
print("最后修改时间:", file_info.st_mtime)
os.stat()
返回包含文件详细属性的元组,包括大小、权限、时间戳等信息。
5.3 权限修改:os.chmod()
os.chmod("script.sh", 0o755)
此方法通过权限模式设置文件访问权限,需注意不同操作系统的权限表示方式差异。
六、实战案例:文件备份工具
6.1 需求分析
假设需要编写一个简单脚本,将指定目录下的所有 .txt
文件备份到新创建的 backup
目录中。
6.2 实现步骤
- 验证目标目录是否存在,若不存在则创建
- 遍历目录中的所有文件
- 过滤出
.txt
文件 - 将文件内容复制到备份目录
6.3 代码实现
import os
import shutil
def backup_files(source_dir, backup_dir):
# 创建备份目录(不存在则创建)
if not os.path.exists(backup_dir):
os.makedirs(backup_dir)
# 遍历源目录文件
for filename in os.listdir(source_dir):
# 过滤.txt文件
if filename.endswith(".txt"):
src_path = os.path.join(source_dir, filename)
dst_path = os.path.join(backup_dir, filename)
# 复制文件
shutil.copy2(src_path, dst_path)
print(f"已备份: {filename}")
backup_files("源目录", "备份目录")
此案例综合运用了目录操作、文件筛选和路径处理技术,展示了 os
模块在实际项目中的应用价值。
七、常见问题与注意事项
7.1 路径问题
- 相对路径 vs 绝对路径:相对路径基于当前工作目录,容易因执行环境变化出错,建议优先使用绝对路径或结合
os.path.abspath()
转换。 - 跨平台兼容性:避免手动拼接路径,使用
os.path.join()
确保不同操作系统下的兼容性。
7.2 异常处理
- 文件操作应始终包裹在
try-except
块中,例如:
try:
os.remove("不存在的文件.txt")
except FileNotFoundError:
print("文件不存在,跳过删除")
- 对于高风险操作(如删除目录),建议添加二次确认或日志记录。
7.3 性能优化
- 大批量文件操作时,优先使用
os.walk()
遍历目录树:
for root, dirs, files in os.walk("目录路径"):
for file in files:
# 处理每个文件
pass
此方法能高效遍历多级子目录,避免递归实现的复杂性。
结论
本文系统梳理了 Python os
模块在文件与目录操作中的核心功能,从基础语法到实战案例,逐步构建了开发者对系统级操作的理解。通过掌握 os
模块的路径处理、权限管理及高级技巧,开发者可以更高效地实现自动化任务、日志管理等应用场景。对于希望深入系统级编程的开发者,建议进一步探索 shutil
模块(文件高级操作)和 pathlib
模块(面向对象路径处理)。掌握这些工具,将为构建更复杂的应用程序奠定坚实的基础。
(字数统计:约 2200 字)