当前位置: 代码网 > it编程>前端脚本>Python > Python利用os模块操作系统路径与目录的完整教学

Python利用os模块操作系统路径与目录的完整教学

2026年08月17日 Python 我要评论
在使用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()—— 安全路径拼接

import os

# 错误做法(不推荐)
path = "data" + "\\" + "images" + "\\" + "photo.jpg"

# 正确做法(推荐)
path = os.path.join("data", "images", "photo.jpg")
print(path)  # windows: data\images\photo.jpg
             # linux/macos: data/images/photo.jpg

优势:自动根据操作系统选择正确的路径分隔符(\/),避免因平台差异导致错误。

2.os.path.abspath()—— 获取绝对路径

import os

relative_path = "project/config.py"
absolute_path = os.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()—— 分离目录与文件名

import os

file_path = "/home/user/docs/report.pdf"

directory = os.path.dirname(file_path)
filename = os.path.basename(file_path)

print(f"directory: {directory}")   # /home/user/docs
print(f"filename: {filename}")     # report.pdf

应用场景

  • 从文件路径中提取目录,用于后续的文件夹操作。
  • 批量处理文件时,按目录分类。

4.os.path.exists()与os.path.isfile()/os.path.isdir()

判断路径是否存在及类型:

import os

path = "example.txt"

if os.path.exists(path):
    print("✅ 路径存在!")
    if os.path.isfile(path):
        print("📄 是一个文件")
    elif os.path.isdir(path):
        print("📁 是一个目录")
else:
    print("❌ 路径不存在")

注意os.path.exists() 只判断路径是否存在于文件系统中,但不会区分是文件还是目录。因此建议配合 isfile()isdir() 使用。

5.os.path.splitext()—— 分离文件名与扩展名

import os

filename = "document_v2.pdf"
name, ext = os.path.splitext(filename)
print(f"name: {name}")      # document_v2
print(f"extension: {ext}")  # .pdf

实用场景:批量重命名文件、按后缀分类、生成新文件名等。

目录操作:创建、遍历与删除

1.os.mkdir()与os.makedirs()—— 创建单层或多层目录

import os

# 单层创建(如果父目录不存在会报错)
try:
    os.mkdir("new_folder")
except fileexistserror:
    print("📁 目录已存在")

# 多层创建(推荐使用)
os.makedirs("project/data/raw/images", exist_ok=true)
print("✅ 成功创建嵌套目录结构")

exist_ok=true 参数可防止目录已存在时报错,是生产环境中的最佳实践。

2.os.listdir()—— 列出目录内容

import os

# 获取当前目录下所有文件和子目录
contents = os.listdir(".")
for item in contents:
    print(f"📦 {item}")

输出示例:

📦 readme.md
📦 data/
📦 scripts/
📦 main.py

技巧:结合 os.path.join() 遍历子目录:

for root, dirs, files in os.walk("."):
    for file in files:
        full_path = os.path.join(root, file)
        print(f"📄 {full_path}")

3.os.rmdir()与os.removedirs()—— 删除空目录

import os

# 只能删除空目录
os.rmdir("empty_folder")  # 仅当目录为空时有效

# 递归删除整个目录树(必须为空)
os.removedirs("nested/empty/dir")

警告:如果目录非空,会抛出异常。若要删除非空目录,应先清空内容。

4.shutil.rmtree()—— 强力删除目录(推荐替代方案)

虽然 shutil 模块不属于 os,但它是 os 的重要补充,特别适合删除包含内容的目录。

import shutil

# 安全删除整个目录及其内容
shutil.rmtree("temp_data", ignore_errors=true)
print("🗑️ 已成功删除 temp_data 目录及其所有子内容")

ignore_errors=true 表示即使某些文件无法删除也不中断程序,适用于清理临时文件。

遍历目录树:os.walk() 的深度解析

os.walk() 是一个强大的生成器函数,能够递归遍历目录树,返回 (root, dirs, files) 三元组。

import os

for root, dirs, files in os.walk("project"):
    level = root.replace("project", "").count(os.sep)
    indent = "│   " * level
    print(f"{indent}📁 {os.path.basename(root)}")

    sub_indent = "│   " * (level + 1)
    for file in files:
        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() 返回文件的详细信息,包括大小、权限、修改时间等。

import os
import time

file_path = "example.txt"
stats = os.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文件权限模式

跨平台路径处理最佳实践

由于不同操作系统使用不同的路径分隔符,我们必须谨慎处理路径字符串。

错误示范

# windows风格(危险!)
path = "data\\images\\logo.png"

# linux/macos风格(同样危险)
path = "data/images/logo.png"

正确做法

import os

# 推荐:使用 os.path.join()
path = os.path.join("data", "images", "logo.png")

# 或者使用 pathlib(更现代,但不在 os 模块内)
from pathlib import path
path = path("data") / "images" / "logo.png"

升级建议:对于新项目,考虑使用 pathlib 模块,语法更直观、面向对象。

实用脚本:批量重命名文件

假设我们有一个文件夹,里面全是 img_001.jpg 格式的照片,想要统一改为 photo_001.jpg

import os

def rename_images(folder_path):
    count = 1
    for filename in os.listdir(folder_path):
        if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
            old_path = os.path.join(folder_path, filename)
            new_name = f"photo_{count:03d}.jpg"
            new_path = os.path.join(folder_path, new_name)
            os.rename(old_path, new_path)
            print(f"🔄 renamed: {filename} → {new_name}")
            count += 1

# 调用函数
rename_images("photos")

输出示例

🔄 renamed: img_001.jpg → photo_001.jpg
🔄 renamed: img_002.jpg → photo_002.jpg
...

安全建议:操作前备份原始文件,或添加确认逻辑。

权限与安全性注意事项

在处理文件和目录时,务必注意权限问题。

import os

path = "/etc/passwd"  # 系统文件,普通用户无权访问

try:
    os.access(path, os.r_ok)  # 检查是否可读
    print("✅ 可读")
except permissionerror:
    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()获取大小、时间等

结语:掌握 os 模块,让脚本更强大!

os 模块虽看似简单,却是 python 文件系统操作的基石。它不仅帮助我们实现基本的路径和目录管理,还为自动化、数据处理、系统维护等高级应用打下坚实基础。

记住三个关键词

  • 安全:永远使用 os.path.join(),避免硬编码路径
  • 兼容:跨平台代码离不开 os 模块的智能处理
  • 健壮:加异常处理,确保程序稳定运行

从今天开始,用 os 模块写出更专业、更可靠的 python 脚本!

小挑战:写一个脚本,自动扫描当前目录,找出所有 .py 文件,并列出它们的大小和最后修改时间。

import os
import time

for root, _, files in os.walk("."):
    for file in files:
        if file.endswith(".py"):
            path = os.path.join(root, file)
            stat = os.stat(path)
            size = stat.st_size
            mtime = time.ctime(stat.st_mtime)
            print(f"🐍 {file} | size: {size}b | modified: {mtime}")

以上就是python利用os模块操作系统路径与目录的完整教学的详细内容,更多关于python操作文件路径与目录的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com