您现在的位置是:首页 >技术杂谈 >Python系列模块之标准库OS详解网站首页技术杂谈

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

开着拖拉机回家 2024-06-25 00:01:03
简介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-配置重复
'

    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)

执行脚本

告警成功

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。