LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

30天学会Python编程:19.Python os模块编程实践

admin
2025年7月17日 21:53 本文热度 21

一、os模块概述

1. os模块是什么?

os模块是Python标准库中用于与操作系统交互的核心模块,提供了丰富的函数来执行文件操作、目录操作、进程管理等系统级任务。

2. 特点

  • 跨平台性:支持Windows、Linux、macOS等主流操作系统
  • 功能全面:覆盖文件系统、进程管理、环境变量等核心功能
  • 底层接口:提供接近操作系统底层的API
  • 标准库集成:Python安装自带,无需额外安装

3. 优势


4. 当前状态

  • Python 3中完全兼容并持续更新
  • pathlibshutil等模块协同工作
  • 在自动化脚本、系统工具开发中广泛应用

二、文件与目录操作

1. 目录操作

基本用法

import os

# 创建目录(单级)
os.mkdir("new_directory")

# 创建多级目录
os.makedirs("parent/child/grandchild", exist_ok=True)

# 删除目录(空目录)
os.rmdir("empty_dir")

# 递归删除空目录
os.removedirs("a/b/c")  # 从c开始删除空目录

注意事项

  • exist_ok=True
    参数避免目录已存在时报错
  • 删除目录前确保目录为空
  • 使用os.path.exists()检查目录是否存在

2. 文件操作

# 重命名文件/目录
os.rename("old.txt""new.txt")

# 删除文件
os.remove("unwanted_file.txt")

# 获取文件属性
file_stat = os.stat("example.txt")
print(f"大小: {file_stat.st_size} bytes")
print(f"修改时间: {file_stat.st_mtime}")

编程技巧

  • 使用try-except处理文件操作异常
  • 结合time模块转换时间戳
  • 使用os.access()检查文件权限

三、路径操作(os.path子模块)

1. 核心功能


2. 详细用法

# 路径拼接
full_path = os.path.join("dir""subdir""file.txt")

# 路径解析
print(os.path.basename(full_path))  # file.txt
print(os.path.dirname(full_path))   # dir/subdir

# 路径分割
dir_part, file_part = os.path.split(full_path)
name, ext = os.path.splitext(file_part)

# 路径检测
print(os.path.exists(full_path))
print(os.path.isfile(full_path))
print(os.path.isdir(full_path))

3. 注意事项

  • 使用os.path.join()代替字符串拼接
    ,确保跨平台兼容性
  • 检查路径是否存在再进行操作
  • 注意路径大小写敏感问题(Linux vs Windows)

四、进程管理

1. 基本功能

# 执行系统命令
exit_code = os.system("ls -l")

# 获取环境变量
print(os.getenv("PATH"))

# 设置环境变量(当前进程有效)
os.environ["CUSTOM_VAR"] = "value"

# 获取当前进程ID
print(f"PID: {os.getpid()}")

2. 高级应用

# 运行程序并获取输出(Python 3.5+)
import subprocess

result = subprocess.run(
    ["python""--version"],
    capture_output=True,
    text=True,
    check=True
)
print(result.stdout)

注意事项

  • os.system()
    返回退出码而非命令输出
  • 优先使用subprocess模块执行复杂命令
  • 环境变量修改仅影响当前进程

五、系统信息获取

1. 核心函数

# 操作系统类型
print(os.name)  # 'posix'(Linux/macOS)或 'nt'(Windows)

# 当前工作目录
print(os.getcwd())

# 更改工作目录
os.chdir("/path/to/new/directory")

# CPU核心数
print(os.cpu_count())

# 文件系统编码
print(os.fsencode("文件名.txt"))  # 处理特殊字符

2. 使用场景举例

  • 根据操作系统类型编写兼容代码
  • 动态调整工作目录
  • 合理利用CPU资源进行并行计算

六、文件描述符操作

1. 低级文件I/O

# 打开文件(低级API)
fd = os.open("data.bin", os.O_RDWR | os.O_CREAT)

# 读写操作
os.write(fd, b"Binary data")
os.lseek(fd, 0, os.SEEK_SET)  # 移动指针
data = os.read(fd, 100)

# 关闭文件
os.close(fd)

2. 应用场景

  • 需要精细控制文件I/O时
  • 处理特殊文件类型(设备文件等)
  • 实现高性能文件操作

注意事项

  • 优先使用内置open()函数处理常规文件
  • 确保文件描述符正确关闭
  • 注意平台差异(flags定义)

七、高级功能与安全

1. 权限管理

# 修改文件权限(Linux/macOS)
os.chmod("script.sh"0o755)  # 可执行权限

# 修改文件所有者
os.chown("file.txt", uid, gid)  # Unix系统

2. 安全实践

# 安全路径检查
def safe_open(path):
    if not os.path.abspath(path).startswith("/safe/directory"):
        raise ValueError("非法路径访问")
    return open(path)

3. 临时文件处理

import tempfile

# 安全创建临时文件
with tempfile.NamedTemporaryFile(delete=Trueas tmp:
    tmp.write(b"Temporary data")
    tmp.flush()
    # 使用临时文件...
# 自动删除

八、综合应用举例:文件备份工具

1. 需求分析


2. 代码实现

import os
import shutil
import datetime
import hashlib

defbackup_directory(source, destination):
    """备份目录并生成校验报告"""
    # 创建备份目录
    timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
    backup_path = os.path.join(destination, f"backup_{timestamp}")
    os.makedirs(backup_path, exist_ok=True)
    
    # 初始化日志
    log_path = os.path.join(backup_path, "backup_log.txt")
    report = []
    
    # 遍历源目录
    file_count = 0
    total_size = 0
    
    for root, dirs, files in os.walk(source):
        # 在备份中创建对应目录
        rel_path = os.path.relpath(root, source)
        dest_dir = os.path.join(backup_path, rel_path)
        os.makedirs(dest_dir, exist_ok=True)
        
        for file in files:
            src_file = os.path.join(root, file)
            dest_file = os.path.join(dest_dir, file)
            
            # 复制文件
            shutil.copy2(src_file, dest_file)
            
            # 计算文件哈希
            withopen(src_file, "rb"as f:
                file_hash = hashlib.md5(f.read()).hexdigest()
            
            # 记录信息
            file_stat = os.stat(src_file)
            report.append({
                "source": src_file,
                "destination": dest_file,
                "size": file_stat.st_size,
                "modified": file_stat.st_mtime,
                "hash": file_hash
            })
            
            file_count += 1
            total_size += file_stat.st_size
    
    # 写入日志
    withopen(log_path, "w"as log:
        log.write(f"Backup Report - {timestamp}\n")
        log.write(f"Source: {source}\n")
        log.write(f"Destination: {backup_path}\n")
        log.write(f"Files: {file_count}\n")
        log.write(f"Total Size: {total_size / (1024*1024):.2f} MB\n\n")
        
        for entry in report:
            log.write(f"{entry['source']} -> {entry['destination']}\n")
            log.write(f"  Size: {entry['size']} bytes\n")
            log.write(f"  Modified: {datetime.datetime.fromtimestamp(entry['modified'])}\n")
            log.write(f"  MD5: {entry['hash']}\n\n")
    
    print(f"备份完成! 文件数: {file_count}, 总大小: {total_size / (1024*1024):.2f} MB")
    print(f"日志文件: {log_path}")

if __name__ == "__main__":
    source_dir = input("请输入源目录: ").strip()
    backup_dir = input("请输入备份目录: ").strip()
    
    ifnot os.path.isdir(source_dir):
        print("错误: 源目录不存在")
    elifnot os.path.isdir(backup_dir):
        print("错误: 备份目录不存在")
    else:
        backup_directory(source_dir, backup_dir)

3. 功能简介

  1. 自动创建带时间戳的备份目录
  2. 保留文件元数据(修改时间等)
  3. 计算文件哈希值确保完整性
  4. 生成详细备份报告
  5. 支持大文件处理

九、总结

1. 安全规范

  • 始终验证用户输入路径
  • 使用os.path.abspath()解析绝对路径
  • 避免直接拼接用户提供的路径
  • 检查文件权限(os.access()

2. 跨平台技巧

# 跨平台路径处理
config_file = os.path.join(os.getenv("APPDATA", os.path.expanduser("~")), "app_config.ini")

# 跨平台文件操作
if os.name == "nt":
    # Windows特定代码
else:
    # Unix/Linux特定代码

3. 性能优化

  • 批量操作时使用os.scandir()代替os.listdir()
  • 避免在循环中重复调用os.path.exists()
  • 对大目录使用生成器表达式

4. 替代方案

# 使用pathlib(Python 3.4+)
from pathlib import Path

# 创建目录
Path("new/dir").mkdir(parents=True, exist_ok=True)

# 文件操作
file = Path("data.txt")
content = file.read_text()

知识图谱



总结

os模块提供了与操作系统交互的丰富接口。通过本教程,我们可以学到:

  1. 文件与目录操作的核心方法
  2. 路径处理的跨平台技巧
  3. 进程管理和系统信息获取
  4. 文件描述符等高级功能
  5. 安全实践和性能优化
  6. 完整实用的综合案例

掌握os模块可以大幅提升Python在系统管理、文件操作和自动化任务方面的能力。建议结合shutilpathlib等模块使用,构建更健壮的应用程序。


阅读原文:原文链接


该文章在 2025/7/18 10:52:10 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved