《Python入门到精通》os模块详解,Python os标准库

news2024/11/17 21:16:59

「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:小白零基础《Python入门到精通》

在这里插入图片描述

os模块详解

  • 1、文件目录操作
    • os.stat() 获取文件状态
    • os.utime() 修改文件时间
    • os.rename() 修改文件/目录
    • os.renames() 递归修改文件/目录
    • os.replace() 替换文件/目录
    • os.remove() 删除文件
    • os.getcwd() 获取工作目录
    • os.getcwdb() 获取工作目录
    • os.chdir() 修改工作目录
    • os.mkdir() 创建目录
    • os.makedirs() 创建多级目录
    • os.rmdir() 删除目录
    • os.removedirs() 删除多级目录
  • 2、系统信息
    • os.name 获取操作系统类型
    • os.environ 获取环境变量
    • os.getenv() 获取环境变量
    • os.get_exec_path() 获取可执行文件路径
    • os.cpu_count() 获取CPU数量
    • os.getlogin() 获取登录用户
    • os.getpid() 获取当前进程ID
    • os.getppid() 获取父进程ID
    • os.urandom() 获取随机字节
  • 2、进程管理
    • os.times() 获取进程时间
    • os.abort() 中断当前进程
    • os.system() 执行系统命令
    • os.popen() 执行shell命令
    • os.startfile() 打开文件
  • 3、错误/异常
    • BlockingIOError
    • ChildProcessError
    • ConnectionError
      • BrokenPipeError
      • ConnectionAbortedError
      • ConnectionRefusedError
      • ConnectionResetError
    • FileExistsError
    • FileNotFoundError
    • InterruptedError
    • IsADirectoryError
    • NotADirectoryError
    • PermissionError
    • ProcessLookupError
    • TimeoutError

OS标准库是操作系统接口模块,提供了操作系统相关功能的调用函数。

使用OS标准库前,需要导入模块 import os

1、文件目录操作

os.stat() 获取文件状态

获取文件或文件描述符的状态,返回一个 stat_result 对象。

stat_result对象有很多可以调用的属性:

  • st_atime:最近访问时间,单位秒
  • st_mtime:最近修改时间,单位秒
  • st_ctime:文件创建时间(Windows),修改时间(unix),单位秒
  • st_size:文件大小,单位字节
  • st_uid:文件所有者的ID
  • st_nlink:硬链接数量
  • st_dev:文件所在设备的标识符
  • st_ino:文件的唯一标识(Windows是文件索引号,Unix是索引节点号)
  • st_mode:文件模式,包括文件类型和文件模式位(即权限位)。
  • st_atime_ns:最近访问时间,单位纳秒
  • st_mtime_ns:最近修改时间,单位纳秒
  • st_ctime_ns:文件创建时间(Windows),修改时间(unix),单位纳秒

还有一些属性需要在Unix系统上才能调用:

  • st_blocks:文件的字节块数,每块512字节。
  • st_blksize:“首选的” 块大小,用于提高文件系统 I/O 效率。写入文件时块大小太小可能会导致读取-修改-重写效率低下。
  • st_rdev:设备类型(针对inode设备)
  • st_flags:文件标志位(用户定义的)
  • st_gen:文件生成号
  • st_birthtime:文件创建时间

os.utime() 修改文件时间

修改文件的访问时间和修改时间,修改后需要重新获取 stat_result 对象,才会更新。

语法

os.uime( path, (atime, mtime))

参数

  • path:(必选)文件路径
  • atime:(必选)文件访问时间
  • mtime:(必选)文件修改时间

实例

import os

os.utime('newDir/myFile', (1491413771, 1591413771))
statResult = os.stat('newDir/myFile')
print(statResult.st_atime)
print(statResult.st_mtime)

输出:

1491413771.0
1591413771.0

os.rename() 修改文件/目录

修改文件名或目录名。

语法

os.rename( src, dst )

参数

  • src:(必选)源文件/目录,即需要修改的文件/目录
  • dst:(必选)目的文件/目录,即修改后的文件/目录

实例

import os

os.rename('myFile', 'newName')

对于Windows系统,文件名已存在会报错 FileExistsError。
对于Unix系统,将文件重命名为目录会报错 IsADirectoryError;将目录重命名为文件会报错 NotADirectoryError。


os.renames() 递归修改文件/目录

递归修改文件名或目录名。先创建所需要的中间目录,重命名后,再调用 removedirs() 删除旧路径中不需要的目录。

语法

os.renames( old, new )

参数

  • old:(必选)旧路径
  • new:(必选)新路径

实例

import os

os.renames('myFile', 'newDir/myFile')

os.replace() 替换文件/目录

修改文件名或目录名,如果文件名已存在,则会静默修改;如果目录已存在,则会报错 OSError。

语法

os.replace( old, new )

参数

  • old:(必选)修改前的路径
  • new:(必选)修改后的路径

实例

import os

os.replace('myFile', 'newDir/myFile')

os.remove() 删除文件

删除文件,删除目录会报错 FileNotFoundError

语法

os.remove( path )

参数

  • path:(必选)文件路径(绝对路径/相对路径)

实例

import os

os.remove('myFile')

os.getcwd() 获取工作目录

获取当前工作目录,也就是当前所在路径,返回字符串类型。

import os

print(os.getcwd())

输出:

E:\data\PrCharm\pythonProject1

os.getcwdb() 获取工作目录

获取当前工作目录,二进制序列(bytes)类型。

import os

print(os.getcwdb())

输出:

b'E:\\data\\PrCharm\\pythonProject1'

os.chdir() 修改工作目录

修改当前工作目录

语法

os.chdir( path )

参数

  • path:(必选,str类型)需要修改的路径

实例

import os

os.chdir('E://data')
print(os.getcwd())

输出:

E:\data

os.mkdir() 创建目录

创建目录,如果目录已存在会报错 FileExistsError,如果路径中父目录不存在会报错 FileNotFoundError。

语法

os.mkdir( path, mode )

参数

  • path:(必选)目录的路径(绝对路径/相对路径)
  • mode:目录的权限(某些系统会忽略)

实例

import os

os.mkdir('myDir')

当前目录下创建了目录

在这里插入图片描述

os.makedirs() 创建多级目录

创建多级目录,上级目录不存在也会自动创建。

语法

os.makedirs( path, mode )

参数

  • path:(必选)目录的路径(绝对路径/相对路径)
  • mode:目录的权限(某些系统会忽略)

实例

import os

os.makedirs('myDir/dir1')

当前目录下创建了目录

在这里插入图片描述

os.rmdir() 删除目录

删除目录,如果目录不存在,会报错 FileNotFoundError;如果目录不为空,会报错 OSError。

语法

os.rmdir( path )

参数

  • path:(必选)需要删除的目录(绝对路径/相对路径)

实例

import os

os.rmdir('newDir')

os.removedirs() 删除多级目录

递归删除多级目录,如果删除了最后一级目录,会尝试依次删除上级目录(删除不掉不会报错,因为大多是因为目录不为空)。

语法

os.removedirs( path )

参数

  • path:(必选)目录路径

实例

import os

os.removedirs('myDir/dir1')

2、系统信息

os.name 获取操作系统类型

获取操作系统的类型,只有三个值ntposixjava

  • nt:Windows系统
  • posix:Linux/mac系统
  • java:java虚拟机

比如,我的电脑是Windows,就返回 nt

import os

print(os.name)

输出:

nt

os.environ 获取环境变量

获取系统环境变量等各种系统信息(导入OS模块时自动收集),字典格式,可以根据建获取

Windows常用字段

os.environ['HOMEPATH']		# 当前用户主目录。
os.environ['TEMP']			# 临时目录路径。
os.environ["PATHEXT"]		# 可执行文件。
os.environ['SYSTEMROOT']	# 系统主目录。
os.environ['LOGONSERVER']	# 机器名。

Linux常用字段

os.environ['USER']			# 当前使用用户。
os.environ['LC_COLLATE']	# 路径扩展的结果排序时的字母顺序。
os.environ['SHELL']			# 使用shell的类型。
os.environ['LAN']			# 使用的语言。
os.environ['SSH_AUTH_SOCK']	# ssh的执行路径。

环境变量的增删改查操作

import os

environ = os.environ
# 新增
environ['环境变量名'] = '环境变量值'
# 删除
del environ['环境变量名']
# 修改
environ['环境变量名'] = '新环境变量值'
# 查询(变量不存在则返回默认值)
environ['环境变量名']
environ.get('环境变量名', '默认值')
# 判断(存在返回True,不存在返回False)
'环境变量值' in environ

os.getenv() 获取环境变量

根据环境变量名,获取环境变量的值,如果环境变量名不存在,就返回default。

语法

os.getenv( key, default )

参数

  • key:(必选,str类型)环境变量名
  • default:(可选)环境变量不存在时返回,默认值是 None

实例

import os

print(os.getenv('TEMP'))

输出:

C:\Users\WANGYU~1\AppData\Local\Temp

os.get_exec_path() 获取可执行文件路径

获取可执行文件路径,从 environ 对象中,返回可执行文件目录的列表。

语法

os.get_exec_path( environ )

参数

  • environ:(可选)默认值None,即使用当前的 environ。

实例

import os

print(os.get_exec_path())

输出:

['E:\\data\\PrCharm\\pythonProject1\\venv\\Scripts', 'C:\\......

os.cpu_count() 获取CPU数量

返回系统的CPU数量,不确定就返回None。

语法

os.cpu_count()

实例

import os

print(os.cpu_count())

输出:

8

os.getlogin() 获取登录用户

获取当前登录用户,准确来说,是通过控制终端进程进行登录的用户名。

import os

print(os.getlogin())

os.getpid() 获取当前进程ID

获取当前进程ID

import os

print(os.getpid())

输出:

8212

os.getppid() 获取父进程ID

获取当前进程的父进程ID

import os

print(os.getppid())

输出:

14132

os.urandom() 获取随机字节

获取指定大小的随机字节,常用于加密。

语法

os.urandom( size )

参数

  • size:(必选)指定随机字节的大小

实例

mport os

print(os.urandom(8))

输出:

b'\xb1\n\xbaw2\x88\x84\xf8'

2、进程管理

创建和管理进程的函数。

os.times() 获取进程时间

返回当前的全局进程时间,列表形式,有5个属性。

  • user:用户时间
  • system:系统时间
  • children_user:所有子进程的用户时间
  • children_system:所有子进程的系统时间
  • elapsed:从过去的固定时间点起,经过的真实时间

Windows系统上,只有user、system两个属性有值,其他均为0。

语法

os.times()

实例

import os

times = os.times()
print(times)

输出:

nt.times_result(user=0.046875, system=0.109375, children_user=0.0, children_system=0.0, elapsed=0.0)

os.abort() 中断当前进程

发送SIGABRT信号给当前进程,用来终止进程,如果进程没有中断,则函数不会返回。

  • Unix系统会生成一个核心转储文件
  • Windows系统立即返回退出代码

语法

os.abort()

比如,当程序出现严重错误时,调用 os.abort() 终止进程。

import os

try:
    # 业务代码
    pass
except:
    os.abort()

补充:

  • SIGABRT用来中止一个程序,处理函数返回后,所有打开的文件描述符将会被关闭,流也会被flush,程序也会结束。
  • SIGABRT是一个暴力信号,可能会破坏进程的状态,应该谨慎使用。

os.system() 执行系统命令

执行系统命令,并在控制台输出执行结果

语法

os.system( commend )

参数

  • commend:(必选)需要执行的命令

实例

import os

os.system('ping www.baidu.com')

输出:

���� Ping www.a.shifen.com [39.156.66.18] ���� 32 �ֽڵ�����:
���� 39.156.66.18 �Ļظ�: �ֽ�=32 ʱ��=17ms TTL=50
���� 39.156.66.18 �Ļظ�: �ֽ�=32 ʱ��=16ms TTL=50

os.popen() 执行shell命令

通过Python执行系统命令,返回命令的执行结果(文本类型的对象)。

语法

os.popen( command, mode, buffer )

参数

  • command:(必选)需要执行的命令
  • mode:(可选)文件打开模式,默认值 r(只读模式)
  • buffer:缓冲区大小,

实例

import os

out = os.popen('ping www.baidu.com')
print(out.read())

输出:

正在 Ping www.a.shifen.com [39.156.66.14] 具有 32 字节的数据:
来自 39.156.66.14 的回复: 字节=32 时间=13ms TTL=50
来自 39.156.66.14 的回复: 字节=32 时间=48ms TTL=50

os.startfile() 打开文件

自动打开文件,绝对路径要用/,相对路径要用 \

语法

os.startfile( path )

实例

import os

os.startfile('newDir\myFile')

执行后,桌面上会打开指定的文件。


3、错误/异常

OS模块所有函数都会抛出OSError及其子类

BlockingIOError

OSError的子类

当在设置为非阻塞操作的对象(例如:套接字)上,执行阻塞操作时触发。

ChildProcessError

OSError的子类

子进程上的操作失败时触发。

ConnectionError

OSError的子类

与连接相关的问题的基类,常见的有它的子类。

BrokenPipeError

ConnectionError的子类

管道中断时触发。

管道是单向通信的,在管道另一端关闭时写入,或者在已经关闭的套接字上写入,都会导致管道中断。

ConnectionAbortedError

ConnectionError的子类

连接被对端终止时触发。

这种异常通常意味着网络连接被意外中断,可能是服务器出现故障、网络拥堵等原因导致的,比如 服务器返回的响应超时或断开了连接。

ConnectionRefusedError

ConnectionError的子类

连接被对方拒绝时触发。

常见的原因有:

  1. 你想连接的服务器没有启动相关服务
  2. 防火墙阻止连接
  3. 端口被占用,关闭占用端口的服务
  4. IP或端口错误

ConnectionResetError

ConnectionError的子类

对端重置连接时触发。

常见的原因有:

  1. 高延迟或丢包等网络错误导致连接中断
  2. 防火墙等ACL访问控制出于安全原因阻止了连接

FileExistsError

OSError的子类

创建的文件或目录已经存在时触发

FileNotFoundError

OSError的子类

请求的文件或目录不存在时触发

InterruptedError

OSError的子类

系统调用被传入信号中断时触发

IsADirectoryError

OSError的子类

对目录执行文件操作时触发

NotADirectoryError

OSError的子类

对文件执行目录操作时触发

PermissionError

OSError的子类

执行的操作没有足够的访问权限时触发

ProcessLookupError

OSError的子类

指定的进程不存在时触发

TimeoutError

OSError的子类

系统功能在系统级别的超时时触发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/899164.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PostgreSQL父子建表查询所有的子数据-利用自定义函数查询

pgsql 函数查询代码 select find_space_tree_list_by_nodeid(1,1) 查询结果示意图 获取子集函数代码 CREATE OR REPLACE FUNCTION "public"."find_space_tree_list_by_nodeid"("nodeid" varchar, "viewid" varchar)RETURNS "…

8.19论文阅读

文章目录 Graph-Segmenter: Graph Transformer with Boundary-aware Attention for Semantic Segmentation方法 SCSC: Spatial Cross-scale Convolution Module to Strengthen both CNNs and Transformers方法 Deformable Mixer Transformer with Gating for Multi-Task Learni…

KFC玩具HelloKitty风扇改造——ESP32蓝牙blinker、1404无刷电机、双18650

改装KFC玩具——ESP32蓝牙无刷风扇 ESP32代码&#xff1a; 使用NodeMCU-32S #define BLINKER_BLE#include <Blinker.h>#include <Arduino.h>// PWM通道 int channel_PWM 3; // PWM频率&#xff0c;那么周期也就是1/50&#xff0c;也就是20ms &#xff0c;PWM一…

2.创建小程序

创建 在开发工具中,选择小程序,点击加号 填写小程序信息,模板使用的是TS+Sass 编辑器的工作区 目录结构 项目使用的是ts的模板,目录结构和js的有一点差异,目录结构如下: miniprogram:小程序根目录 —pages:小程序页面目录 ——xxx:页面目录,一个页面对应一个目…

加了一个班,简单2步就设置好了公司的内网穿透服务

单位里没有固定的网管&#xff0c;胆子全落在我的身上。 起初是最近买了一套客户及财务软件&#xff0c;其实专业术语就是ERP&#xff0c;主管让我们把手头的资料全部录入进去&#xff0c;说是可以提高我们的工作效率&#xff0c;于是我们就开始各种录入&#xff0c;那个时候已…

今天,谷歌Chrome浏览器部署抗量子密码

谷歌已开始部署混合密钥封装机制&#xff08;KEM&#xff09;&#xff0c;以保护在建立安全的 TLS 网络连接时共享对称加密机密。 8月10日&#xff0c;Chrome 浏览器安全技术项目经理Devon O’Brien解释说&#xff0c;从 8 月 15 日发布的 Chrome 浏览器 116 开始&#xff0c;谷…

小航助学GESP_C++一级模拟测试卷第5套(含题库答题软件账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSD…

【力扣】42. 接雨水 <模拟、双指针、单调栈>

【力扣】42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,…

AlphaZero能否从围棋和国际象棋飞跃到量子计算?

一项新的研究表明&#xff0c;DeepMind惊人的游戏算法AlphaZero可以帮助释放量子计算的力量和潜力。 自两年多前出现以来&#xff0c;AlphaZero一再证明了其快速学习能力&#xff0c;将自己提升到围棋&#xff0c;国际象棋和将棋&#xff08;日本象棋&#xff09;的特级大师级别…

【数据结构OJ题】用队列实现栈

原题链接&#xff1a;https://leetcode.cn/problems/implement-stack-using-queues/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 可以用两个队列去实现一个栈&#xff0c;每次始终保持一个队列为空。 入栈相当于给非空队列进行入队操作。 出栈相…

二维码智慧门牌管理系统:打造社区管理新格局

文章目录 前言一、精准数据支持的实现二、便捷办事流程的提升三、多元化服务渠道的拓展四、高效管理和优质服务的提供 前言 在科技的推动下&#xff0c;社区管理正在迎来一场革命性的变革。其中&#xff0c;二维码智慧门牌管理系统崭露头角&#xff0c;成为了社区管理的得力助…

221、仿真-基于51单片机的智能啤酒发酵罐多点温度压力水位排水加水检测报警系统设计(程序+Proteus仿真+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件设计 二、设计功能 三、Proteus仿真图 ​编辑 四、程序源码 资料包括&#xff1a; 需要完整的资料可以点击下面的名片加下我&#xff0c;找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选择 方…

无涯教程-TensorFlow - 优化器

Optimizers是扩展类&#xff0c;其中包括用于训练特定模型的附加信息&#xff0c;Optimizers类使用给定的参数初始化&#xff0c;用于提高速度和性能&#xff0c;以训练特定模型。 TensorFlow的基本Optimizers是- tf.train.Optimizer 此类在tensorflow/python/training/opti…

shell 脚本的基础

目录 一、什么是shell脚本 二、有哪些表达式 一、变量 二、运算符 三、语句类型分哪几种 一、条件语句 二、分支语句 三、循环语句 四、函数 五、正则表达式 一、标准正则 二、扩展正则 六、文件操作四剑客 七、shell 一、shell是一种命令解释器 二、查看系统中…

esp-idf的电源管理——esp系列芯片的功耗管理硬件

1 芯片的供电 当我们为芯片设计外围电路时,必然会设计供电电路,这是芯片能正常工作的前提。通常是电源电压通过一个稳压电路之后给到芯片的供电引脚。以S3为例,下面是S3的引脚图: 其中以VDD打头的就是供电引脚。比如VDD3P3、VDDA等。供电引脚不止一个,这些供电引脚有什么…

一百六十二、Kettle——Linux上安装的Kettle9.2创建共享资源库

一、目的 在实际的团队开发过程中&#xff0c;不可能将自己的转换、作业和调度等配置存放在自己的电脑中&#xff0c;所以kettle提供资源库的方式&#xff0c;供我们将转换、作业等存储下来&#xff0c;构成一种协作平台。 Kettle支持的资源库类型有三种&#xff1a; 1.Pent…

Python资源楼:40份干货资料+思维导图

盖个楼&#xff0c;收集了社区的Python资料&#xff0c;方便大家查看。 &#xff08;说盖楼好像也不对&#xff0c;叫索引&#xff1f;呵呵不管了&#xff09; 一段小前言&#xff08;首帖要好看点&#xff09;&#xff1a; Python语法简单&#xff0c;很容易上手&#xff0c…

探索大模型时代下的算法工程师前景与发展路径

文章目录 大模型时代的挑战与机遇从算法到工程&#xff1a;技能升级的必要性发展路径与职业规划路径一&#xff1a;深耕研究领域路径二&#xff1a;工程实践与部署路径三&#xff1a;跨界合作与解决复杂问题路径四&#xff1a;教育培训和技术普及 不断学习与更新知识结论 &…

Ubuntu16.04-ros环境搭建笔记=1=

tips&#xff1a;搬运资料&#xff0c;留个记录 安装Ubuntu Ubuntu官网下载地址 安装 虚拟机安装Ubuntu 最好断网安装Ubuntu&#xff0c;可以节约时间 Ubuntu基础设置 Ubuntu换国内源 sudo apt upgrade可以看到镜像已经换过来了 VMwareTool安装 把这个压缩包拖到桌面&…

【以太网通信】RS232 串口转以太网

最近和 RK 研发同事在调试通信接口&#xff0c;排查与定位 RK3399 接收数据出错的问题。FPGA 与 RK3399 之间使用一路 RS232 串口进行通信&#xff0c;由于串口数据没有分包&#xff0c;不方便排查问题&#xff0c;想到可以开发一个 RS232 串口转以太网的工具&#xff0c;将串口…