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

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

目录

​一、模块

 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 runoob1


runoob1()
runoob2()

执行结果:


三、标准库之os模块


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

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

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

import os

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

执行结果: 

示例: 查看文件状态

import os

print(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 os

print(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 os

print("判断 是否  为 文件: ",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 os

os.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 os

headers = {'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).content


if __name__ == '__main__':
    f = open(path + "/tmp/text", "r")
    line = f.readline()
    text= '告警类型:HostName-配置重复\n'

    count = 1
    while line:
        if (count >= 2):
            text = text + line
            line = f.readline()
        count += 1
    f.close()
    # 钉钉的URL
    api_url="https://oapi.dingtalk.com/robot/send?access_token=749b2f448e357b7ffc1bff7b01d3c26a750dfaec75651680fdc8703152837f65"
    msg(text,api_url)

执行脚本

告警成功

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

目标检测数据预处理——部件截图,按一定比例进行外扩

本片是截图的篇的升级版本,简单版本的截图请参考根据目标框外扩一定比例进行截图(连带标签)。 对目标框(类别名称)进行分类,将同一类的目标框进行截图并分类保存在不同的文件夹中。 在本篇当中,…

Flink有状态计算的状态容错

状态容错 State Fault Tolerance 首先来说一说状态容错。Flink 支持有状态的计算,可以把数据流的结果一直维持在内存(或 disk)中,比如累加一个点击数,如果某一时刻计算程序挂掉了,如何保证下次重启的时候&…

一文了解customRef 自定义ref使用

概念 按照文档中的说明:customRef 可以用来创建一个自定义的 ref,并对其依赖项跟踪和更新触发进行显式控制。它需要一个工厂函数,该函数接收 track 和trigger函数作为参数,并且应该返回一个带有 get 和 set 的对象。 其实大致意思…

5.2 标准IO:文件的打开、关闭及代码实现

目录 标准IO 文件的打开 标准I/O-fopen-mode参数 ​编辑 标准I/O-fopen-示例 标准I/O-fopen-新建文件权限 标准I/O-处理错误信息 标准I/O-错误信息处理-示例1 标准I/O-错误信息处理-示例2 文件的关闭 标准IO 文件的打开 打开就是占用资源 下列函数可用于打开一个…

历经70+场面试,我发现了大厂面试的套路都是···

今年的金三银四刚刚过去,我又想起了我在去年春招时面试了50余家,加上暑期实习面试了20余家,加起来也面试了70余场的面试场景了。 基本把国内有名的互联网公司都面了一遍,不敢说自己的面试经验很丰富,但也是不差的。 …

Kali-linux使用社会工程学工具包(SET)

社会工程学工具包(SET)是一个开源的、Python驱动的社会工程学渗透测试工具。这套工具包由David Kenned设计,而且已经成为业界部署实施社会工程学攻击的标准。SET利用人们的好奇心、信任、贪婪及一些愚蠢的错误,攻击人们自身存在的…

HNU-计算机系统-Challenge

Challenge 计科210X wolf 202108010XXX 本题是从属于第七次讨论课的个人题,听说做了有加分?我来试试。 下面是相关报告。 题目: C 语言的初学者第一个编写的 C 代码一般是如下所示的“ #include <stdio.h> int main() {printf("Hello, World!");

项目管理:有效的沟通对项目的成功至关重要

为实施有效的沟通&#xff0c;需要建立沟通管理计划同时理解什么是沟通&#xff0c;沟通的对象是谁&#xff0c;沟通的目标是什么&#xff0c;难度在哪里&#xff0c;并选择合适的沟通方式。 项目沟通是确保项目团队的相关信息能及时、正确地产生、收集、发布、储存和最终处理…

Java多线程异常处理

文章目录 一. 线程中出现异常的处理1. 线程出现异常的默认行为2. setUncaoughtExceptionHandler()方法处理异常3. setDefaultUncaoughtExceptionHandler()方法进行异常处理 二. 线程组内出现异常 一. 线程中出现异常的处理 1. 线程出现异常的默认行为 当单线程中初出现异常时…

LOTO示波器如何测试阻抗的频响曲线

LOTO示波器如何测试阻抗的频响曲线 模块的输入输出端口&#xff0c;在电路分析上&#xff0c;一般简单表征为电阻来进行计算和分析。但多数情况下&#xff0c;这些端口并不是纯电阻的特性&#xff0c;更精确一些&#xff0c;它可能是电阻电容以及电感的组合&#xff0c;表现为非…

ChatGPT 聊天接口API 使用

一、准备工作 1.准备 OPENAI_ACCESS_TOKEN 2.准备好PostMan 软件 二、测试交流Demo 本次使用POSTMAN工具进行快速测试&#xff0c;旨在通过ChatGPT API实现有效的上下文流。在测试过程中&#xff0c;我们发现了三个问题&#xff1a;    1.如果您想要进行具有上下文的交流&…

从供应链协同角度挖掘数字化应用场景

企业在数字化转型的过程中&#xff0c;供应链的数字化转型是绕不开的话题。供应链的数字化转型&#xff0c;是借助数字化技术赋能企业和供应链从业人员&#xff0c;驱动业务向更加高效智能的方向发展。越来越多的企业意识到需要依靠新技术&#xff0c;也往往非常强调新技术的应…

为什么我们应该选择Renderbus瑞云渲染进行 EEVEE 渲染?

在某些情况下&#xff0c;用户需要高精度、快速的渲染&#xff0c;而 EEVEE的诞生就是为了满足这种需求。Eevee&#xff08;Extra Easy Virtual Environment Engine&#xff09;是 Blender 最新的内部渲染引擎&#xff0c;由用于 Epic Games 开发的虚幻引擎的相同代码提供支持…

openldap介绍以及使用

参考文献&#xff1a;openldap介绍和使用 基本概念 官网&#xff1a;https://www.openldap.org 官方文档&#xff1a;https://www.openldap.org/doc LDAP是一个开放的&#xff0c;中立的&#xff0c;工业标准的应用协议&#xff0c;通过IP协议提供访问控制和维护分布式信息的…

【Linux】进程信号“疑问?坤叫算信号吗?“

鸡叫当然也算信号啦~ 文章目录 前言一、认识信号量二、信号的产生 1.调用系统函数向进程发信号2.由软件条件产生信号3.硬件异常产生信号总结 前言 信号在我们生活中很常见&#xff0c;下面我们举一举生活中信号的例子&#xff1a; 你在网上买了很多件商品&#xff0c;再等待不…

统计一个数的二进制中1的个数(三种方法)

那么好了好了&#xff0c;宝子们&#xff0c;今天给大家分享一篇经典例题的三种实现方法&#xff0c;来吧&#xff0c;开始整活&#xff01;⛳️ 一、基础法 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int number_of_one(int n) {int count 0;while(n){if…

VTKmimics Calculate Parts

前言&#xff1a;本博文主要研究mimics中Calculate Parts所采用的方法以及VTK中三维重建的方法&#xff0c;希望对各位小伙伴有所帮助&#xff0c;谢谢&#xff01; mimics-Calculate parts - Interpolation Gray Interpolation 灰度值插值是一种真正的3D插值&#xff0c;它考…

宝塔面板快速搭建贪吃蛇小游戏web网站 - 无需云服务器,网站发布上线

文章目录 前言视频教程1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面&#x1f34e;总结 转载自远程内网穿透的文章&#xff1a;Linux使用宝塔面板搭建网站&#xff0c;并内网穿透实现公网访问 前言 宝塔面板作为简单好用的…

RoyalScope-总线工作状况和信号质量“体检”

海量存储、洞悉细微 无间断连续采样、波形和报文记录 内置100MHz示波器&#xff0c;采样率高达100MS/s&#xff0c;精确查看、分析和统计信号波形细节。 无间断连续采样总线上信号&#xff0c;全部无遗漏的解析成报文(包括数据帧、遥控帧、过载帧、错误帧、帧间隔和错误报文)和…

Vue3-黑马(十四)

目录&#xff1a; &#xff08;1&#xff09;vue3-进阶-router-令牌-前端路由 &#xff08;2&#xff09;vue3-进阶-router-令牌-前端路由 &#xff08;3&#xff09;vue3-进阶-pinia1 &#xff08;4&#xff09;vue3-进阶-pinia2 &#xff08;1&#xff09;vue3-进阶-rout…