当前位置: 首页 > news >正文

Python之os模块(文件和目录操作、进程管理、环境变量访问)

文章目录

  • Python之os模块
    • 功能分类速查表
      • 文件和目录操作
      • `路径操作 (os.path 子模块)`
      • 进程管理
      • 环境变量和用户信息
      • 文件描述符和权限
    • 常用示例
      • 遍历目录
      • 创建目录结构
      • 文件操作
      • 获取文件信息
      • 跨平台路径处理
    • 其他补充点
      • '\\'转义字符注意事项
        • 使用原始字符串(推荐)
        • 使用双反斜杠`\\`
        • 使用正斜杠 `/`(Python 自动兼容)
      • 创建或删除需要判断是否存在
        • 创建文件/目录
        • 删除文件/目录
      • `__pycache__ `缓存目录
      • windows打印os.system("dir") 会乱码
        • 乱码原因
        • 修改控制台编码为 UTF-8(推荐)

Python之os模块

os 模块是 Python 的标准库之一,提供了丰富的操作系统相关功能,包括文件和目录操作、进程管理、环境变量访问等。它允许 Python 程序与操作系统进行交互,实现跨平台的操作系统功能调用。

功能分类速查表

文件和目录操作

功能/属性说明示例
os.getcwd()获取当前工作目录current_dir = os.getcwd()
os.chdir(path)改变当前工作目录os.chdir(‘/new/path’)
os.listdir(path)返回指定目录下的文件和目录列表files = os.listdir(‘.’)
os.mkdir(path)创建目录os.mkdir(‘new_dir’)
os.makedirs(path)递归创建目录os.makedirs(‘dir1/dir2/dir3’)
os.remove(path)删除文件os.remove(‘file.txt’)
os.rmdir(path)删除空目录os.rmdir(‘empty_dir’)
os.removedirs(path)递归删除空目录os.removedirs(‘dir1/dir2’)
os.rename(src, dst)重命名文件或目录os.rename(‘old.txt’, ‘new.txt’)
os.stat(path)获取文件/目录状态信息info = os.stat(‘file.txt’)
os.path 子模块提供路径相关操作详见下方 os.path 部分
os.walk()递归遍历目录树for root, dirs, files in os.walk(top_path):

在这里插入图片描述

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

功能/属性说明示例
os.path.abspath(path)返回绝对路径abs_path = os.path.abspath(‘file.txt’)
os.path.basename(path)返回路径的最后部分os.path.basename(‘/a/b/c.txt’) → ‘c.txt’
os.path.dirname(path)返回目录部分os.path.dirname(‘/a/b/c.txt’) → ‘/a/b’
os.path.exists(path)检查路径是否存在if os.path.exists(‘file.txt’):
os.path.isfile(path)检查是否为文件if os.path.isfile(‘file.txt’):
os.path.isdir(path)检查是否为目录if os.path.isdir(‘directory’):
os.path.join(path1, path2)智能拼接路径os.path.join(‘dir’, ‘sub’, ‘file.txt’)
os.path.split(path)分割路径为目录和文件名dir, file = os.path.split(‘/a/b/c.txt’)
os.path.splitext(path)分割文件名和扩展名name, ext = os.path.splitext(‘file.txt’)
os.path.getsize(path)获取文件大小(字节)size = os.path.getsize(‘file.txt’)
os.path.getmtime(path)获取最后修改时间mtime = os.path.getmtime(‘file.txt’)

在这里插入图片描述

进程管理

功能/属性说明示例
os.system(command)执行系统命令os.system(‘ls -l’)
os.popen(command)执行命令并获取输出output = os.popen(‘ls’).read()
os.getpid()获取当前进程IDpid = os.getpid()
os.getppid()获取父进程IDppid = os.getppid()
os.kill(pid, sig)向进程发送信号os.kill(pid, signal.SIGTERM)
os._exit(n)直接退出进程(不清理)os._exit(1)

在这里插入图片描述

环境变量和用户信息

功能/属性说明示例
os.environ包含环境变量的字典home = os.environ[‘HOME’]
os.getenv(key)获取环境变量值path = os.getenv(‘PATH’)
os.putenv(key, value)设置环境变量os.putenv(‘MY_VAR’, ‘value’)
os.uname()获取系统信息(Unix)info = os.uname()
os.getlogin()获取当前登录用户名user = os.getlogin()
os.getuid()获取当前用户ID(Unix)uid = os.getuid()
os.getgid()获取当前组ID(Unix)gid = os.getgid()

在这里插入图片描述

文件描述符和权限

功能/属性说明示例
os.open(path, flags)低级文件打开fd = os.open(‘file.txt’, os.O_RDWR)
os.close(fd)关闭文件描述符os.close(fd)
os.read(fd, n)从文件描述符读取data = os.read(fd, 100)
os.write(fd, str)向文件描述符写入os.write(fd, b’data’)
os.chmod(path, mode)更改文件权限os.chmod(‘file.txt’, 0o755)
os.access(path, mode)检查文件权限if os.access(‘file.txt’, os.R_OK):
  • os.open() 和内置的 open() 函数
    • os.open():低级接口,适合特殊需求(如文件锁、原始字节操作)。

    • open():高级接口,适合日常文件读写(自动处理编码、缓冲和资源管理)。

    • 优先使用 open(),除非你有明确的理由需要使用 os.open()

  • 参考Python之文件操作

常用示例

遍历目录

import osfor root, dirs, files in os.walk('.'):for file in files:print(os.path.join(root, file))

创建目录结构

import osif not os.path.exists('project/data'):os.makedirs('project/data')

文件操作

import os# 复制文件(简单方式)
with open('source.txt', 'rb') as src, open('dest.txt', 'wb') as dst:dst.write(src.read())# 删除文件前检查
if os.path.isfile('old_file.txt'):os.remove('old_file.txt')

获取文件信息

import os
import timefile_stat = os.stat('document.pdf')
print(f"大小: {file_stat.st_size} 字节")
print(f"最后修改: {time.ctime(file_stat.st_mtime)}")

跨平台路径处理

import osconfig_path = os.path.join(os.getenv('HOME'), 'config', 'settings.ini')
print(f"配置文件路径: {config_path}")

其他补充点

'\'转义字符注意事项

使用原始字符串(推荐)

在路径字符串前加 r,告诉 Python 不要处理转义字符:

print(os.path.isfile(r'D:\pycharm\project01\day04\模块.py'))
#           注意这里的 `r` ↑
使用双反斜杠\\

手动转义每个反斜杠:

print(os.path.isfile('D:\\pycharm\\project01\\day04\\模块.py'))
使用正斜杠 /(Python 自动兼容)

即使是在 Windows 系统,Python 也支持 / 作为路径分隔符:

print(os.path.isfile('D:/pycharm/project01/day04/模块.py'))

在这里插入图片描述

创建或删除需要判断是否存在

创建文件/目录
  • 是否需要判断存在?
    • 不必须:Python 的创建操作(如 open()、os.makedirs())在目标已存在时可能会报错,但可以通过参数直接覆盖或忽略。

    • 推荐做法:

      • 文件:使用 ‘w’ 模式直接覆盖,或 ‘x’ 模式确保不覆盖(需捕获 FileExistsError)。
      try:with open('file.txt', 'x') as f:  # 文件存在时报错f.write('content')
      except FileExistsError:print("文件已存在,未覆盖")
      
      • 目录:使用 os.makedirs(exist_ok=True) 自动忽略已存在的目录。
      import os
      os.makedirs('my_dir', exist_ok=True)  # 目录存在时不报错
      
删除文件/目录
  • 是否需要判断存在?

    • 不必须:删除前检查存在性可避免异常,但直接捕获异常更简洁(Python 推崇 EAFP 风格)。
  • 推荐做法:

    • 文件:直接删除 + 捕获 FileNotFoundError。
    import o
    try:os.remove('file.txt')  # 文件不存在时报错
    except FileNotFoundError:print("文件不存在,无需删除")
    
    • 目录:使用 shutil.rmtree() 递归删除(无视存在性)。
    import shutil
    shutil.rmtree('my_dir', ignore_errors=True)  # 目录不存在时不报错
    
  • 性能:直接操作 + 异常处理的性能通常优于先检查(尤其在高并发场景)

在这里插入图片描述

__pycache__ 缓存目录

  • 使用os.listdir()查看指定目录下的文件和目录列表时,可以看到该目录
  • 当导入一个 Python 模块(如 import mymodule)时,Python 会将模块的源代码(.py 文件)编译成字节码(一种优化后的二进制格式),并保存在__pycache__目录中
    __pycache__ 是 Python 用于优化模块加载的缓存目录,无需手动干预,可以安全忽略或删除。
  • 作用
    • 性能优化:直接加载已编译的字节码比重新解析 .py 文件更快,尤其是对于大型模块。

    • 避免重复编译:如果模块未修改,Python 会直接复用字节码,跳过编译步骤。

  • 一般编辑器/IDE 默认隐藏了它
    在这里插入图片描述

windows打印os.system(“dir”) 会乱码

在这里插入图片描述

乱码原因
  • os.system() 直接调用系统命令,返回的是 系统原生编码(GBK)。

  • 如果 Python 或终端尝试用 UTF-8 解码 GBK 内容,就会显示乱码(如 � 或奇怪符号)。

修改控制台编码为 UTF-8(推荐)

在代码开头强制设置终端编码:

import os
import sys# 设置控制台编码为 UTF-8
sys.stdout.reconfigure(encoding='utf-8')  # Python 3.7+
os.system("chcp 65001")  # Windows 切换到 UTF-8 代码页print(os.system("dir"))  # 现在应该正常显示中文

在这里插入图片描述

相关文章:

  • 使用arXiv.org上的资源进行学术研究
  • IDEA 编程语言 MoonBit:为 AI 与大型系统而生,无缝调用 Python
  • AI智能体工具调研分享(未完待续)
  • **代换积分法**或**变量替换法**)
  • 蓝桥杯国14 不完整的算式
  • Google机器学习实践指南(学习速率篇)
  • 50页 @《人工智能生命体 新启点》中國龍 原创连载
  • Swagger API 未授权访问漏洞【原理扫描】修复
  • Data Whale
  • 【机械视觉】Halcon—【一、Halcon的介绍和基础语法】
  • AdGuard解锁高级版(Nightly)_v4.10.36 安卓去除手机APP广告
  • 宏山激光韩国釜山开放日圆满举行,服务本地化再提速
  • 路由协议RIP配置与分析
  • 机器人强化学习入门学习笔记(三)
  • 中国软件行业 2024 年度分析报告
  • MyBatis 中 parameterType 属性
  • el-form表单规则验证
  • 机器学习 Day1
  • G1人形机器人软硬件组成
  • 什么是HTTP
  • 南昌做网站的公司多不多/上海seo顾问
  • 网站开发需要学mvc吗/网络营销的方法有哪些
  • web网站设计的要求/seo最新快速排名
  • 删除wordpress所以评论/seo网络营销技术
  • 网站算信息化建设/企业网站搜索优化网络推广
  • 科技 杭州 网站建设/微信推广平台哪里找