Python系列模块之标准库OS详解

news/2024/11/9 9:49:41/

    感谢点赞和关注 ,每天进步一点点!加油!

目录

​一、模块

 1.1 模块的定义

1.2 模块的分类

1.3 模块的基本导入语法

二、Python中的包

三、标准库之os模块

实战: 钉钉告警应用


一、模块


 1.1 模块的定义


Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。

  • 模块让你能够有逻辑地组织你的 Python 代码段。
  • 相关的代码分配到一个模块里能让你的代码更好用,更易懂。
  • 模块能定义函数,类和变量,模块里也能包含可执行的代码。

1.2 模块的分类


模块分为

  1. 标准库(python自带的模块,可以直接调用)
  2. 开源模块(第三方模块,需要先pip安装,再调用)
  3. 自定义模块(自己定义的模块)

模块存放的路径(RPM安装Python):

1.3 模块的基本导入语法


from modname import *  # from导入模块文件里的所有函数
from modname import name1[, name2[, ... nameN]]  # from导入模块文件里的部分函数

二、Python中的包


包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。

简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件, 该文件的内容可以为空。__init__.py 用于标识当前文件夹是一个包。

package_runoob 目录下定义 runoob1.py、runoob2.py、__init__.py 文件,test.py 为测试调用包的代码,目录结构如下:

package_runoob/runoob1.py

def runoob1():print("I'm in runoob1")

package_runoob/runoob2.py

def runoob2():print("I'm in runoob2")

package_runoob/__init__.py

# 通级目录 用 . 导入
from . import runoob1
from . import runoob2
print('package_runoob 初始化')

然后我们在 package_runoob 同级目录下创建 test.py 来调用 package_runoob

test.py

# 导入package包
from package_runoob.runoob2 import runoob2
from package_runoob.runoob1 import runoob1runoob1()
runoob2()

执行结果:


三、标准库之os模块


os 模块提供了非常丰富的方法用来处理文件和目录。大概操作分为以下 5 类:

  • 查看目录与切换目录
  • 查看文件状态
  • 文件路径相关操作
  • 判断相关操作
  • 文件改名与删除,目录创建与删除

示例: 查看目录与切换目录等

import osprint(os.getcwd())			# 查看当前目录
os.chdir("/tmp")			# 改变当前目录print(os.curdir)			# 打印当前目录.
print(os.pardir)			# 打印上级目录..
os.chdir(os.pardir)			# 切换到上级目录
print(os.listdir("/"))		# 列出目录里的文件,结果是相对路径,并且为list类型

执行结果: 

示例: 查看文件状态

import osprint(os.stat("/root/data01.txt"))	   # 得到文件的状态信息,结果为一个tuple类型
print(os.stat("/root/data01.txt")[6])	   # 得到状态信息(tuple)的第7个元素,也就是得到大小
print(os.stat("/root/data01.txt")[-4])	   # 得到状态信息(tuple)的倒数第4个元素,也就是得到大小
print(os.stat("/root/data01.txt").st_size) # 用这个方法也可以得到文件的大小print(os.path.getsize(__file__))	 # 得到文件的大小,__file__是特殊变量,代表程序文件自己
print(os.path.getsize("/root/data01.txt")) # 也可以指定想得到大小的任意文件

执行结果: 

示例: 文件路径相关操作

import osprint(os.path.abspath(__file__))		    # 得到文件的绝对路径
print(os.path.dirname("/root/data01.txt"))	# 得到文件的绝对路径的目录名,不包括文件
print(os.path.basename("/root/data01.txt"))	# 得到文件的文件名,不包括目录
print(os.path.split("/root/data01.txt"))	# 把dirname和basename分开,结果为tuple类型
print(os.path.join("/root","data01.txt"))	# 把dirname和basename合并

执行结果:

示例: 判断相关操作

import osprint("判断 是否  为 文件: ",os.path.isfile("/root/data01.txt"))  # 判断是否为文件,结果为bool类型
print("判断是否为绝对路径: ",os.path.isabs("1.txt"))		# 判断是否为绝对路径,结果为bool类型
print("判断 是 否  存  在: ",os.path.exists("/tmp/11.txt"))	# 判断是否存在,结果为bool类型
print("判断 是否 为 目 录: ",os.path.isdir("/tmp/"))		# 判断是否为目录,结果为bool类型
print("判断是否为链接文件: ",os.path.islink("/etc/rc.local"))	# 判断是否为链接文件,结果为bool类型

执行结果:

示例: 文件改名与删除,目录创建与删除等

import osos.rename("/tmp/1.txt","/tmp/11.txt")	# 改名
#os.remove("/tmp/11.txt")		# 删除os.mkdir("/tmp/aaa")			# 创建目录
#os.rmdir("/tmp/aaa")			# 删除目录 
os.makedirs("/tmp/a/b/c/d")		# 连续创建多级目录
#os.removedirs("/tmp/a/b/c/d")		# 从内到外一级一级的删除空目录,目录非空则不删除

执行结果:

os.popen()os.system()可以直接调用linux里的命令

# 下面这两句执行操作都可以成功
os.popen("touch /tmp/222")
os.system("touch /tmp/333")

执行结果:

实战: 钉钉告警应用

需求:文本内容使用 钉钉告警发送出来

说明: 告警文件内容 放在 python脚本 路径下的 /tmp/text ,告警内容我们可以自身需求定义。Python 使用Linux 自带的 2.7.5 版本。

msg.py

#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import json
import sys
import osheaders = {'Content-Type': 'application/json;charset=utf-8'}# 当前路径
path=sys.path[0]
def msg(text,api_url):json_text= {"msgtype": "text","text": {"content": text},"at": {"atMobiles": ["1786001xxxx"]}}print requests.post(api_url,json.dumps(json_text),headers=headers).contentif __name__ == '__main__':f = open(path + "/tmp/text", "r")line = f.readline()text= '告警类型:HostName-配置重复\n'count = 1while line:if (count >= 2):text = text + lineline = f.readline()count += 1f.close()# 钉钉的URLapi_url="https://oapi.dingtalk.com/robot/send?access_token=749b2f448e357b7ffc1bff7b01d3c26a750dfaec75651680fdc8703152837f65"msg(text,api_url)

执行脚本

告警成功


http://www.ppmy.cn/news/73896.html

相关文章

Vue 封装自定义组件,通过npm install的方式安装使用

1、新创建一个空的项目 npm install -g vue/cli 安装脚手架4的版本 vue create vue-demo 使用安装的脚手架创建一个新的vue项目 npm run serve 运行创建的项目命令 2、在src下创建一个package文件夹用于存放自己的自定义组件,我创建了一个…

PETRv2 论文学习

1. 解决了什么问题? 过去,一般使用基于单目视觉进行 3D 目标检测。现在进行 3D 任务的方法大致分两类。一类是基于 BEV,将多视角图像映射为 BEV 表征,然后使用 3D 目标检测方法。另一类是基于 DETR,如 DETR3D 和 PETR…

11. Mysql执行原理之索引合并详解

MySQL性能调优 1. Intersection合并1.1 情况一:等值匹配1.2 情况二:主键列可以是范围匹配 2. Union合并2.1 情况一:等值匹配2.2 情况二:主键列可以是范围匹配2.3 情况三:使用Intersection索引合并的搜索条件 3. Sort-U…

GIT常用命令大全

系列文章目录 文章目录 系列文章目录1.git clone xxx2.git add .3.git commit -m "xxx"4.git checkout -b xx origin/xx5.git push --set-upstream origin newbranch:origin/branch6.git branch --set-upstream-toorigin/branch newbranch7.git reset --soft HEAD^8.…

从零开始学习JVM(五)-运行时数据区的方法区

1. 方法区基本介绍 官方文档:The Java Virtual Machine Specification 《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。”但对于HotSpotJVM而言&…

Godot引擎 4.0 文档 - 循序渐进教程 - 节点和场景

本文为Google Translate英译中结果,DrGraph在此基础上加了一些校正。英文原版页面: Nodes and Scenes — Godot Engine (stable) documentation in English 节点和场景 在Godot 关键概念概述中,我们看到 Godot 游戏是一棵场景树&#xff0…

面试官:你的技术看起来像是初级

最近看了很多简历,很多候选人年限不小,但是做的都是一些非常传统的项目,想着也不能通过简历就直接否定一个人,何况现在大环境越来 越难,大家找工作也不容易,于是就打算见一见。 在沟通中发现,由…

敏捷项目管理阶段框架-推测阶段实践

推测阶段实践 关注产品和项目,创造和理解产品待办事项列表和发布计划 怎么做计划、怎么做需求 产品需求规划(怎么做计划) 洋葱圈 愿景、产品路线图、产品发布计划、迭代发布计划、每日计划 滚动式规划,渐进明细,走一…