系列
目录
add、subtract、multiply、devide 加减乘除
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
模块提供了以下日志级别,从低到高排序:
logging.DEBUG
logging.INFO
logging.WARNING
logging.ERROR
logging.CRITICAL
默认情况下,日志级别设置为
WARNING
。这意味着只有级别为WARNING
、ERROR
和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`,它们提供了更简洁和高级的并发功能。