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

 更新时间:2025年06月17日 10:42:03   投稿:daisy  
OS库是Python标准库,包含几百个函数,提供通用的、基本的操作系统交互功能,这篇文章主要介绍了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.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),避免一次性加载所有路径导致内存压力。

②、参数详解

python

os.walk(top, topdown=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"):
    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库介绍内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于Python数据分析之pandas统计分析

    基于Python数据分析之pandas统计分析

    这篇文章主要介绍了基于Python数据分析之pandas统计分析,具有很好对参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • 对numpy 数组和矩阵的乘法的进一步理解

    对numpy 数组和矩阵的乘法的进一步理解

    下面小编就为大家分享一篇对numpy 数组和矩阵的乘法的进一步理解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • python 一个figure上显示多个图像的实例

    python 一个figure上显示多个图像的实例

    今天小编就为大家分享一篇python 一个figure上显示多个图像的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python减少循环层次和缩进的技巧分析

    Python减少循环层次和缩进的技巧分析

    这篇文章主要介绍了Python减少循环层次和缩进的技巧,结合实例形式较为详细的分析了Python优化代码跳出循环以减少循环层次的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-03-03
  • python 寻找优化使成本函数最小的最优解的方法

    python 寻找优化使成本函数最小的最优解的方法

    这篇文章主要介绍了python 寻找优化使成本函数最小的最优解的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • window下eclipse安装python插件教程

    window下eclipse安装python插件教程

    这篇文章主要为大家详细介绍了window下eclipse安装python插件教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • 基于Python+tkinter实现简易计算器桌面软件

    基于Python+tkinter实现简易计算器桌面软件

    tkinter是Python的标准GUI库,对于初学者来说,它非常友好,因为它提供了大量的预制部件,本文小编就来带大家详细一下如何利用tkinter制作一个简易计算器吧
    2023-09-09
  • Python中super的用法实例

    Python中super的用法实例

    这篇文章主要介绍了Python中super的用法实例,本文对比了普通继承和super继承的相关内容,从运行结果上看,普通继承和super继承是一样的,但是其实它们的内部运行机制不一样,这一点在多重继承时体现得很明显,需要的朋友可以参考下
    2015-05-05
  • 新手常见Python错误及异常解决处理方案

    新手常见Python错误及异常解决处理方案

    这篇文章主要介绍了新手常见Python错误及异常解决处理方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • python安装requests库的实例代码

    python安装requests库的实例代码

    在本篇文章中小编给大家分享了关于python怎么安装requests库的知识点以及代码内容,有兴趣的朋友们学习下。
    2019-06-06

最新评论