Python中os库功能全面解析与介绍

一、os 库概述

  • 功能:提供与操作系统交互的接口,包括文件管理、环境变量、进程控制、路径操作等。
  • 跨平台特性:大部分函数支持 Windows、Linux、macOS,但部分功能存在系统差异。
  • 核心模块
  • os:基础操作系统接口
  • os.path:路径处理工具
  • 导入方式
  • import os

    二、常用功能分类详解

    1. 路径操作(os.path 模块)​
    函数 描述 示例 输出示例
    os.path.abspath(path) 返回绝对路径 os.path.abspath("test.txt") /home/user/test.txt
    os.path.dirname(path) 返回路径的目录部分 os.path.dirname("/a/b/c.txt") /a/b
    os.path.basename(path) 返回路径的文件名部分 os.path.basename("/a/b/c.txt") c.txt
    os.path.join(path1, path2) 智能拼接路径(跨平台安全) os.path.join("dir", "file.txt") dir/file.txt
    os.path.exists(path) 检查路径是否存在 os.path.exists("test.txt") True/False
    os.path.isfile(path) 检查是否为文件 os.path.isfile("test.txt") True
    os.path.isdir(path) 检查是否为目录 os.path.isdir("docs") True
    os.path.getsize(path) 获取文件大小(字节) os.path.getsize("test.txt") 1024
    os.path.splitext(path) 分割文件名和扩展名 os.path.splitext("file.txt") ('file', '.txt')

     2. 目录管理

    函数 描述 示例 注意
    os.getcwd() 获取当前工作目录 print(os.getcwd()) 返回绝对路径
    os.chdir(path) 切换当前工作目录 os.chdir("..") 失败抛出 FileNotFoundError
    os.listdir(path=".") 列出目录内容 os.listdir("/tmp") 返回文件名列表(不递归)
    os.mkdir(path) 创建单层目录 os.mkdir("new_dir") 目录已存在时抛出 FileExistsError
    os.makedirs(path) 递归创建多层目录 os.makedirs("a/b/c") 类似 mkdir -p
    os.rmdir(path) 删除空目录 os.rmdir("empty_dir") 目录非空时抛出 OSError
    os.removedirs(path) 递归删除空目录 os.removedirs("a/b/c") 从最深层开始向上删除

     3. 文件操作

    函数 描述 示例 注意
    os.remove(path) 删除文件 os.remove("temp.txt") 文件不存在时抛出 FileNotFoundError
    os.rename(src, dst) 重命名/移动文件或目录 os.rename("old.txt", "new.txt") 跨磁盘移动可能失败
    os.stat(path) 获取文件状态信息 st = os.stat("file.txt")
    st.st_size
    返回包含大小、时间等的对象
    os.utime(path, times) 修改文件访问/修改时间 os.utime("file.txt", (atime, mtime)) 时间戳为秒数

     4. 进程管理

    函数 描述 示例 注意
    os.system(command) 执行系统命令 os.system("ls -l") 返回命令退出状态码
    os.popen(command) 执行命令并获取输出(已废弃) output = os.popen("date").read() 建议改用 subprocess
    os.exec*() 系列 替换当前进程(如 os.execlp os.execlp("python", "python", "script.py") 执行后原进程终止
    os.kill(pid, signal) 向进程发送信号 os.kill(pid, signal.SIGTERM) Windows 支持有限

     5. 环境变量管理

    函数/属性 描述 示例 注意
    os.environ 字典形式的环境变量 os.environ["PATH"] 修改后仅影响当前进程
    os.getenv(key, default) 获取环境变量值 os.getenv("HOME", "/tmp") 键不存在时返回 default
    os.putenv(key, value) 设置环境变量(不推荐) os.putenv("DEBUG", "1") 建议直接操作 os.environ

     6. 系统信息

    函数/属性 描述 示例 输出示例
    os.name 操作系统名称 print(os.name) posix(Linux/macOS)
    nt(Windows)
    os.sep 路径分隔符 os.sep / 或 \
    os.linesep 行终止符 os.linesep \n(Linux)
    \r\n(Windows)
    os.cpu_count() 返回 CPU 核心数 os.cpu_count() 8

    三、实际应用示例

    1. 递归遍历目录
    def list_files(startpath):
        for root, dirs, files in os.walk(startpath):
            level = root.replace(startpath, '').count(os.sep)
            indent = ' ' * 4 * level
            print(f"{indent}{os.path.basename(root)}/")
            subindent = ' ' * 4 * (level + 1)
            for f in files:
                print(f"{subindent}{f}")
    
    list_files("/tmp")

     os.walk(path) 是 Python 中用于递归遍历目录结构的核心函数,可深度遍历指定路径下的所有子目录和文件。以下从功能、参数、返回值到应用场景的全面解析:

    ①、核心功能与运行机制

    1. 目录树遍历
      以 path 为根目录,逐层遍历所有子目录,生成目录树的完整结构。支持 ​深度优先 或 ​广度优先 遍历(通过 topdown 参数控制)。

    2. 数据生成方式
      返回一个 ​生成器​(generator),按需生成三元组 (root, dirs, files),避免一次性加载所有路径导致内存压力。

    ②、参数详解

    python

    os.walk(top, topdown=True, onerror=None, followlinks=False)
    参数 类型 作用
    top str 要遍历的根目录路径
    topdown bool 默认 True:先返回父目录再子目录;False 则逆序(从叶子节点向上)
    onerror callable 遍历出错时的回调函数(接收异常对象作为参数)
    followlinks bool 是否追踪符号链接指向的真实目录(默认 False

    ③、返回值解析

    每次迭代返回的三元组包含:

    1. ​**root**
      当前遍历的目录绝对路径(如 "/data/images/cats")。
    2. ​**dirs**
      当前目录下的 ​直接子目录名列表​(不含路径,如 ["2023", "2024"])。
    3. ​**files**
      当前目录下的 ​文件名列表​(不含路径,如 ["cat1.jpg", "cat2.png"])。

    示例目录结构

    markdown

    root/
    ├── dir1/
    │   ├── file1.txt
    │   └── subdir/
    └── dir2/
        └── file2.log

    对应的遍历输出:

    python

    # 第一次迭代
    ('root', ['dir1', 'dir2'], [])  
    # 第二次迭代(进入 dir1)
    ('root/dir1', ['subdir'], ['file1.txt'])  
    # 第三次迭代(进入 subdir)
    ('root/dir1/subdir', [], [])  
    # 第四次迭代(进入 dir2)
    ('root/dir2', [], ['file2.log'])

     遍历所有文件并获取完整路径

    python

    import os
    
    for root, dirs, files in os.walk("data"):
        for file in files:
            full_path = os.path.join(root, file)  # 拼接完整路径[3,6](@ref)
            print(f"发现文件:{full_path}")

     2. 批量重命名文件

    folder = "docs"
    for filename in os.listdir(folder):
        if filename.endswith(".txt"):
            new_name = filename.replace(" ", "_")
            os.rename(
                os.path.join(folder, filename),
                os.path.join(folder, new_name)
            )

     3. 安全创建临时目录

    import tempfile
    
    def create_temp_dir():
        temp_dir = tempfile.mkdtemp()
        try:
            print(f"临时目录已创建: {temp_dir}")
            # 执行操作...
        finally:
            os.rmdir(temp_dir)
            print("临时目录已删除")

    四、注意事项

    1. 路径处理
  • 不要手动拼接路径:使用 os.path.join() 替代字符串拼接,避免跨平台问题:
  • # 错误方式
    path = "dir" + "/" + "file.txt"  # 在Windows下失效
    
    # 正确方式
    path = os.path.join("dir", "file.txt")

    2. 异常处理
  • 文件操作需捕获常见异常:
  • try:
        os.remove("non_exist.txt")
    except FileNotFoundError as e:
        print(f"文件不存在: {e}")

    3. 安全性
  • 谨慎使用 os.system():可能引发命令注入漏洞,优先使用 subprocess.run()
  • # 危险!用户输入可能包含恶意命令
    user_input = "some; rm -rf /"
    os.system(f"echo {user_input}")
    
    # 安全方式
    import subprocess
    subprocess.run(["echo", user_input], check=True)

    4. 跨平台兼容性
  • 检查系统差异:
  • if os.name == 'posix':
        print("运行在 Unix-like 系统")
    elif os.name == 'nt':
        print("运行在 Windows 系统")

    五、与 shutil 库的对比

    功能 os 库 shutil 库
    文件复制 ❌ 无直接支持 ✅ shutil.copy()
    目录删除 ✅ 只能删空目录 ✅ shutil.rmtree() 递归删除
    压缩文件 ❌ 无支持 ✅ shutil.make_archive()
    元数据保留 ❌ 需手动处理 ✅ copystat() 保留权限和时间

    作者:wanglaqqqq

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python中os库功能全面解析与介绍

    发表回复