当前位置: 代码网 > it编程>前端脚本>Python > Python中-os库的用法超详细介绍

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

2025年06月17日 Python 我要评论
一、os库概述​功能:提供与操作系统交互的接口,包括文件管理、环境变量、进程控制、路径操作等。​跨平台特性:大部分函数支持 windows、linux、macos,但部分功能存在系统差异。​核心模块:

一、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库介绍内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

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

发表评论

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