Python常用技能手册 - 包package

系列

Python常用技能手册 - 基础语法

Python常用技能手册 - 模块module

Python常用技能手册 - 包package


目录

logging 日志库

logging.basicConfig() 参数介绍

level 日志级别

format 日志格式

logging.StreamHandler() 控制台输出

logging.handlers 处理类

RotatingFileHandler 滚动文件

HTTPHandler 发送到HTTP服务器

json

json.dumps() 导出字符串

json.dump() 导出文件

json.loads() 加载字符串

json.load() 加载文件

xml 解析xml文件

configparser 解析ini文件

pyyaml 解析yaml文件

psutil 运维工具

pstuil._common

bytes2human

psutil.disk_usage(path) 磁盘

psutil.cpu_count() CPU核数

psutil.cpu_percent CPU使用率

psutil.virtual_memory() 内存

numpy

导入 import

创建、修改、切片、打印(二维数组)

arr.reshape() 整形

add、subtract、multiply、devide 加减乘除

np.zeros() 全零数组

np.ones() 全1矩阵

np.ones() * x 全x矩阵

pandas


Python包就是一个包含模块文件的目录,目录名称就是包名称。Python引入了按目录来组织模块的方式,是为了避免模块名冲突,不同包中的模块名可以相同。

通常来说,Python中的包,和Java中的库泛指同一个概念,这里不作区分。

logging 日志库

logging 库是一个功能强大的日志记录系统,它允许你记录不同级别的日志信息,并将这些信息输出到不同的目标,如控制台、文件、网络连接等。

import logging

logging.basicConfig() 参数介绍

level 日志级别

# 设置日志级别为DEBUG
logging.basicConfig(level=logging.DEBUG)

日志的几种输出

# 记录一条日志信息
logging.debug("This is a debug message")
logging.info("This is an info message")
logging.warning("This is a warning message")
logging.error("This is an error message")
logging.critical("This is a critical message")

Python 的 logging 模块提供了以下日志级别,从低到高排序:

  1. logging.DEBUG
  2. logging.INFO
  3. logging.WARNING
  4. logging.ERROR
  5. logging.CRITICAL

默认情况下,日志级别设置为 WARNING。这意味着只有级别为 WARNINGERROR 和 CRITICAL 的日志消息会被记录。如果你想记录更详细的日志信息,可以将日志级别设置为 DEBUG

format 日志格式

logging.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s')

logging.StreamHandler() 控制台输出

import logging

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

if __name__ == '__main__':
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)

    handler2 = logging.StreamHandler()
    handler2.setFormatter(formatter)
    logger.addHandler(handler2)


    logger.info("OK")

输出结果 

2023-12-28 22:54:42,659 - root - INFO - OK

logging.handlers 处理类

Python的logging.handlers模块提供了多种处理程序类,用于将日志消息发送到不同的目标。

RotatingFileHandler 滚动文件

  • baseFilename:指定基础文件名。如果未设置,则使用日志记录器的名称和日志等级来创建文件名。
  • suffix:添加到基础文件名中的后缀,例如 .log。如果为空,则不会添加后缀。
  • backupCount:要保留的备份文件的数量。超过该数量的备份文件将被删除。如果为负数,则不删除备份文件。
  • encoding:指定用于写入日志文件的字符编码。默认为 None,表示使用默认的字符编码。
  • delay:如果为 True,则在打开文件之前调用 open() 方法。默认为 False
  • mode:指定打开文件的模式。默认为 a,表示追加模式。
  • close:如果为 True,则在调用 emit() 方法后关闭文件。默认为 True

比如

handler = RotatingFileHandler('example.log', maxBytes=1024*1024, backupCount=5)  

设置了日志格式和最大字节数(1MB),以及要保留的备份文件的数量(5个)。当日志文件大小超过1MB时,将自动创建新文件,并保留最近的5个备份文件。

具体的例子如下, 

import logging
from logging.handlers import RotatingFileHandler

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

if __name__ == '__main__':
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)

    # 配置日志记录器
    handler1 = RotatingFileHandler('main.log', maxBytes=1024 * 1024, backupCount=5)
    handler1.setFormatter(formatter)
    logger.addHandler(handler1)

    logger.info("OK")

 输出结果,在mian.log下查看日志记录,

2023-12-28 22:51:49,535 - root - INFO - OK
2023-12-28 22:55:08,079 - root - INFO - OK

HTTPHandler 发送到HTTP服务器

HTTPHandler 是 Python 的 logging 模块中的一个类,用于将日志消息发送到 HTTP 服务器。它允许你将日志记录到远程服务器,以便进行集中管理和分析。

  • host:指定远程服务器的地址或主机名。
  • port:指定远程服务器的端口号。默认为 80。
  • url:指定远程服务器的 URL 路径。默认为 "/logger"。
  • method:指定用于发送日志消息的 HTTP 方法。默认为 "POST"。
  • headers:一个字典,包含要发送的自定义 HTTP 头信息。默认为空字典。
  • chunk_size:指定每个 HTTP 请求的日志消息数量。默认为 10。
  • delay:如果为 True,则在打开连接之前调用 open() 方法。默认为 False
  • auth_function:一个函数,用于处理 HTTP 身份验证。默认为 None

handler = HTTPHandler('http://example.com:8080/logger', method='POST')  

json

Python 的 json 包是用于处理 JSON(JavaScript Object Notation)格式数据的标准库。JSON 是一种轻量级的数据交换格式,易于阅读和写入,同时也易于机器解析和生成。

Python内置的标准库,不需要安装。常用方法有4个,掌握了能应对90%的场景。

json.dumps() 导出字符串

dump是倒出来的意思,s是str的缩写。意思是“导出字符串”,把JSON转换为 JSON 字符串。

import json

if __name__ == '__main__':
    data = {
        "name": "Ma",
        "age": 18
    }
    json_string = json.dumps(data)  # 转换为 JSON 字符串
    print(json_string)  # '{"name": "Ma", "age": 18}'

json.dump() 导出文件

写出为文件

with open('data.json', 'w') as file:  
    json.dump(data, file)  # 将数据写入 JSON 文件

json.loads() 加载字符串

import json

if __name__ == '__main__':
    parsed_data = json.loads('{"name": "Ma", "age": 18}')
    print(parsed_data)

json.load() 加载文件

with open('data.json', 'r') as file:  
    data = json.load(file)  # 从 JSON 文件读取数据

xml 解析xml文件

configparser 解析ini文件

这是Python标准库中的一个模块,用于解析INI格式的配置文件。它提供了类似于parseconfig的功能,可以读取配置文件并将其转换为Python对象。

pyyaml 解析yaml文件

psutil 运维工具

Python的psutil(Process and System Utilities)库是一个跨平台的库,提供了便利的函数用来获取操作系统的信息,比如CPU、内存、磁盘、网络等,还可以进行进程管理。支持Windows、Linux和macOS系统,提供了丰富的功能和API接口,使用简单方便。

pip3 install psutil

pstuil._common

bytes2human

将字节转换成人类易读的方式,类似于Linux下的“ls -h”。

import psutil
from psutil._common import bytes2human


def get_disk_space(path='C:'):
    usage = psutil.disk_usage(path)
    space_total = bytes2human(usage.total)
    space_used = bytes2human(usage.used)
    space_free = bytes2human(usage.free)
    space_used_percent = bytes2human(usage.percent)
    return  space_total, space_used, space_free, space_used_percent


if __name__ == '__main__':
    print(get_disk_space())

## ('952.8G', '300.0G', '652.8G', '31.5B')

psutil.disk_usage(path) 磁盘

import psutil

print(psutil.disk_usage(r'C:')) # :记得加,不然会报错
## sdiskusage(total=1023077773312, used=322154532864, free=700923240448, percent=31.5)

它就会以元组的形式返回四个信息给你,分别是总容量、以用容量、空余容量(单位是bytes)和以用百分比。

psutil.cpu_count() CPU核数

逻辑核数

一般是物理核数的双倍。类似于我们说的6核12线程CPU。

import psutil

print(psutil.cpu_count())   # 8

 物理核数

import psutil

print(psutil.cpu_count(logical=False))  # 4

psutil.cpu_percent CPU使用率

包含如何获取每个CPU、所有CPU的使用率。

import psutil

for x in range(5):
    # interval=0.5 间隔0.5s

    # 每个逻辑CPU的都计算
    print("each CPU", psutil.cpu_percent(interval=0.5, percpu=True))

    # 所有CPU取平均
    print("Total", psutil.cpu_percent(interval=0.5, percpu=False))

输出如下:

each CPU [3.0, 3.0, 6.2, 9.1, 6.2, 3.0, 6.2, 9.1]
Total 12.5
each CPU [9.4, 12.1, 9.1, 17.6, 15.6, 18.2, 15.2, 12.1]
Total 21.8
each CPU [20.0, 6.1, 21.2, 12.1, 42.4, 6.1, 17.6, 18.8]
Total 15.9
each CPU [5.9, 6.1, 12.1, 18.2, 9.1, 6.1, 6.1, 9.1]
Total 7.4
each CPU [9.1, 9.4, 6.1, 6.1, 12.1, 9.1, 12.1, 0.0]
Total 9.1

psutil.virtual_memory() 内存

import psutil

print(psutil.virtual_memory())  
# svmem(total=17029259264, available=8437215232, percent=50.5, used=8592044032, free=8437215232)

total: 总内存
available: 可用内存
percent: 内存使用率
used: 已使用的内存

numpy

NumPy(Numerical Python的简称)是Python中用于处理大规模数值和矩阵运算的库。它提供了多维数组对象、数学函数以及用于读写磁盘数据的工具等。NumPy是许多科学计算库(如Pandas、SciPy和Scikit-learn)的基础,因此掌握NumPy对于进行数据分析、机器学习和科学计算等任务非常重要。

在图像处理领域,二维数据是最常用的。我们直接以二维数组举例。

导入 import

import numpy as np

创建、修改、切片、打印(二维数组)

import numpy as np

if __name__ == '__main__':
    arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

    # 修改
    arr[0, 0] = 100
    print(arr)  # 输出: [[100   2   3] [  4   5   6] [  7   8   9]]

    # 切片、输出
    print(arr[1:3, 1:3])  # 输出: [[ 5  6] [ 8  9]]

    # 指定元素输出
    print(arr[[0, 2], [1, 1]])  # 输出: [2 8]

arr.reshape() 整形

# 整形
print(arr.reshape(1, 9))    # 输出: [[100   2   3   4   5   6   7   8   9]]

add、subtract、multiply、devide 加减乘除

b = np.array([[10, 20, 30], [40, 50, 60]])
print(np.add(arr, b))  # 输出: [[110  22  33] [  84  95  106] [  77  88  99]]
print(np.subtract(arr, b))  # 输出: [[ -9   0  -3] [ -39 -40 -50] [ -33 -34 -37]]
print(np.multiply(arr, b))  # 输出: [[  0  40   90] [ -80 -20   60] [ -52 -16  -24]]
print(np.divide(arr, b))  # 输出: [[    nan    nan    nan] [ -0.75 -0.4  -0.5 ] [ -0.71 -0.43 -0.57]]

np.zeros() 全零数组

import numpy as np

if __name__ == '__main__':
    y = np.zeros((5, 5), dtype=int)
    print(y)
    # 输出
    # [[0 0 0 0 0]
    #  [0 0 0 0 0]
    #  [0 0 0 0 0]
    #  [0 0 0 0 0]
    #  [0 0 0 0 0]]

np.ones() 全1矩阵

import numpy as np

if __name__ == '__main__':
    x = np.ones([2, 2], dtype=int)
    print(x)
    # 输出
    # [[1 1]
    #  [1 1]]

np.ones() * x 全x矩阵

核心代码

x = np.ones([2, 2], dtype=int) * 20

举例如下,

import numpy as np

if __name__ == '__main__':
    x = np.ones([2, 2], dtype=int) * 20
    print(x)
    # 输出
    # [[20 20]
    #  [20 20]]

pandas

concurrent 并发包

Python中有许多更现代的并发库,例如`concurrent.futures`和`asyncio`,它们提供了更简洁和高级的并发功能。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值