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 实现步骤

  1. 验证目标目录是否存在,若不存在则创建
  2. 遍历目录中的所有文件
  3. 过滤出 .txt 文件
  4. 将文件内容复制到备份目录

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 字)

最新发布