Loading

python运维脚本常用库使用

一、命令行工具

1.1 获取命令行参数

import sys

print(sys.argv())

sys.argv返回参数列表,列表中第一个值是当前运行脚本的名称

1.2 使用标准输入/输出

通过sys.stdinsys.stdoutsys.stderr函数分别读取标准输入、输出、错误

1.3 解析INI结构配置文件

使用ConfigParser模块解析INI结构配置文件:

import configparser

## ----------------读取INI文件-------------------
## new ConfigParser对象,允许选项值为空
config = configparser.ConfigParser(allow_no_value=True)

## 读取配置文件
config.read('/path/to/fimename')

## 获取所有章节,返回章节名的列表
config.sections()

## 判断章节是否存在 
config.has_section(section)

## 获取某个章节下的所有选型
config.options(section)

## 判断某个章节下某个选项是否存在
config.has_option(section, option)

## 获取某个章节下某个选项的值
config.get(section, option)


## ----------------修改INI文件-------------------
## 删除某个章节
config.remove_section(section)

## 添加新的章节
config.add(section)

## 删除某个章节下的某个选项
config.remove_option(section, option)

## 添加/修改选项
config.set(section, option, value)

## 保存配置文件
config.write(open('/save/to/path', 'w'))

二、日志

2.1 简单使用

通过logging.basicConfig函数配置日志级别、输出目的地及输出格式,三个参数可缺省

import logging

logging.basicConfig(
	level=,
    format=,
    filename=
)

logging.info('this is a test')

2.2 通过配置文件配置日志

logging模块中概念:

  • Logger :日志记录器,是应用程序中能直接使用的接口;

  • Handler :日志处理器,用以表明将日志保存到什么地方以及保存多久;

  • Form atter :格式化,用以配置日志的输出格式。

在典型的使用场景中,一个日志记录器使用一个日志处理器, 一个日志处理器使用一个日志格式化。

2.2.1 编写配置文件

  • 定义日志记录器、日志处理器、日志格式化器的引用名
  • 关系绑定
[loggers]
keys = loggerName

[handlers]
keys = handlerName

[formatters]
keys = formatName



[logger_loggerName]
handlers = handlerName

[handle_handlerName]
class=
args=
level=
formatter=formatName

[formatter_formatName]
format=

2.2.2 启用配置

import logging.config

logging.config.fileConfig(filename)

三、文件系统管理

3.1 路径操作

import os

## 获取当前路径
os.getcwd()

## 打印指定路径下所有的文件及目录,默认是当前目录
os.listdir()

## 拼接路径
os.join(path1, path2,...)

## 获取绝对路径
os.path.abspath()

## 获取相对路径
os.path.realpath(path, startPath)

## 获取当前文件所在目录和文件名,第一个参数是目录第二个参数是文件名
os.path.split()

## 返回文件所在目录
os.path.dirname()

## 返回文件名
os.path.basename()

## 返回文件名及扩展名
os.path.splitext()

## 遍历目录树,返回迭代对象
## 每次迭代返回一个三元组(当前路径、当前路径下所有的目录名,当前路径下的所有文件名)
os.path.walk()

3.2 判断文件类型

## 判断文件是否存在
os.path.exists()

## 判断文件是否存在以及是否一个文件
os.path.isfile()

## 判断文件是否存在以及是否一个目录
os.path.isdir()

3.3 文件的复制、增删

import os
import shutil

## 递归创建目录
os.makedirs()

## 移动/修改文件名
shutil.move(src, dst)

## 删除单个文件
os.remove()

## 删除目录树,os.rmdir要求必须空目录
shutil.rmtree

四、文件解压缩

import os
import zipfile

def compress(src, out):
    with zipfile.ZipFile(out, 'w', zipfile.ZIP_DEFLATED) as f:
        for path, dirs, files in os.walk(os.path.abspath(src)):
            for file in files:
                filename = os.path.join(path, file)
                arcname = os.path.relpath(filename, os.path.abspath(src))
                ## filename指待压缩文件路径,arcname指压缩后显示的文件名
                ## 为避免创建中间目录,使用相对路径名
                f.write(filename=filename, arcname=arcname)

五、读取Excel文件

5.1 读取Excel文件

import openpyxl

## 加载表格
## 可以设置为只读模式,加快读取速度
workbook = openpyxl.load_workbook(excelName)

## 获取工作表
## 获取当前激活的工作表
sheet = workbook.active
## 获取所有工作表
sheet = workbook.worksheets()
## 根据工作表名获取工作表对象
sheet = wokrdboot[sheetname]

## 获取单元格
## 根据坐标获取单元格
cell = sheet[坐标]
## 获取某列或某行的所有单元格
cells = sheet[列/行号]
## 遍历所有行,每次迭代返回当前行的所有单元格
sheet.iter_rows

## 获取单元格值
cell.value

5.2 保存Excel文件

workbook.save(filename)

六、HTTP网络请求

6.1 Request和Response类

  • requests.request(method, url, **kwargs)方法参数:

    method -- 新的方法 Request 对象: GET , OPTIONS , HEAD , POST , PUT , PATCH 或 DELETE .

    url -- 网址

    params -- (可选)字典、要在查询字符串中发送的元组或字节列表

    data -- (可选)要在正文中发送的字典、元组列表、字节或类似文件的对象

    json -- (可选)要在主体中发送的JSON可序列化python对象

    headers -- (可选)要与发送的HTTP头的字典

    cookies -- (可选)要与一起发送的dict或cookiejar对象

    files -- (可选)字典 'name': file-like-objects (或) {{'name': file-tuple}} ) for multipart encoding upload. file-tuple 可以是2元组 ('filename', fileobj) ,三元组 ('filename', fileobj, 'content_type') 或四元组 ('filename', fileobj, 'content_type', custom_headers) 在哪里 'content-type' 是定义给定文件的内容类型的字符串,并且 custom_headers 一个类似dict的对象,包含要为文件添加的附加头。

    auth -- (可选)auth tuple以启用基本/摘要/自定义http auth。

    timeout (float or tuple) -- (可选)在放弃前等待服务器发送数据的秒数,以浮点形式,或 (connect timeout, read timeout) 元组。

    allow_redirects (bool) -- (可选)布尔值。启用/禁用get/options/post/put/patch/delete/head重定向。默认为 True .

    proxies -- (可选)字典映射协议到代理的URL。

    verify -- (可选)或者是一个布尔值,在这种情况下,它控制我们是验证服务器的TLS证书,还是一个字符串,在这种情况下,它必须是要使用的CA束的路径。默认为 True .

    stream -- (可选) False ,将立即下载响应内容。

    cert -- (可选)如果为字符串,则为SSL客户端证书文件(.pem)的路径。如果tuple(‘cert’,‘key’)对。

  • requests.Response对象属性及方法

    • close()

      释放回池的连接。一旦调用此方法 raw 不能再次访问对象。注意:通常不需要显式调用。

    • content

      响应的内容(字节)。

    • cookies

      服务器发送回的一罐cookie。

    • encoding

      访问r.text时要解码的编码。

    • headers

      响应头的不区分大小写字典。例如, headers['content-encoding'] 将返回 'Content-Encoding' 响应头。

    • json(**kwargs)

      返回响应的JSON编码内容

    • ok

      返回true, status_code 小于400,否则为假。此属性检查响应的状态代码是否在400和600之间,以查看是否存在客户端错误或服务器错误。如果状态代码介于200和400之间,则返回true。这是 not 检查响应代码是否为 200 OK .

    • raise_for_status

    • reason

      响应HTTP状态的文本原因,例如“未找到”或“确定”。

    • request

      这个 PreparedRequest 此为响应的对象。

    • status_code

      响应HTTP状态的整数代码,例如404或200。

    • text

      响应的内容(Unicode)。如果response.encoding为none,则使用 chardet .响应内容的编码仅基于HTTP头,遵循RFC2616到字母。如果您可以利用非HTTP知识更好地猜测编码,那么应该设置 r.encoding 在访问此属性之前。

    • url

      响应的最终URL位置

6.2 get请求

requests.get(url, param={}, headers={})

6.3 post请求

## 发送键值对
requests.post(url, headers={}, data={})

## 发送json格式正文
## json参数会自动将字典类型转我json字符串
##或者使用json.dumps手动转为字符串传给data参数
requests.post(url, header={}, json={})
posted @ 2022-08-23 21:56  未夏  阅读(429)  评论(0编辑  收藏  举报