开发者

Python中-os库的用法超详细介绍

目录
  • 一、os 库概述
  • 二、常用功能分类详解
    • ​1. 路径操作(os.path 模块)​
    • 2. 目录管理
    • 3. 文件操作
    • 4. 进程管理
    • 5. 环境变量管理
    • 6. 系统信息
  • 三、实际应用示例
    • ​1. 递归遍历目录
      • ①、核心功能与运行机制
      • ②、参数详解
      • ③、返回值解析
    • 2. 批量重命名文件
      • 3. 安全创建临时目录
      • 四、注意事项
        • ​1. 路径处理
          • 2. 异常处理
            • 3. 安全性
              • 4. 跨平台兼容性
              • 五、与 shutil 库的对比

                一、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"ISOpu)/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.execlpos.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 中用于递归遍历目录结构的核心函数,可深度遍历指定路径下的所有子目录和文件。以下从功能、参数、返回值到应用场景的全面解析:

                ①、核心功能与运行机制

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

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

                ②、参数详解

                pythjson

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

                ③、返回值解析

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

                • ​**root**

                  当前遍历的目录绝对路径(如 "/data/images/cats")。

                • ​**dirs**

                  当前目录下的 ​直接子目录名列表​(不含路径,如 ["2023", "2024"])。

                • ​**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")js:
                    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() 保留权限和时间

                到此这篇关于Python中-os库用法介绍的文章就介绍到这了,更多相关Python -os库介绍内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

                0

                上一篇:

                下一篇:

                精彩评论

                暂无评论...
                验证码 换一张
                取 消

                最新开发

                开发排行榜