python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python -os库介绍

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

投稿:daisy

OS库是Python标准库,包含几百个函数,提供通用的、基本的操作系统交互功能,这篇文章主要介绍了Python中-os库用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

一、os 库概述

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

①、核心功能与运行机制

②、参数详解

python

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

③、返回值解析

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

示例目录结构

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. 路径处理

# 错误方式
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. 安全性

# 危险!用户输入可能包含恶意命令
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库介绍内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文