【Python学习】常用第三方模块

(一)、Pillow

Pycharm 安装:打开Terminal、python -m pip install pip python -m pip install Pillow
官网Pillow

from PIL import Image, ImageFilter

im = Image.open('D:\code\PycharmProjects\PythonStudy\966760155050624.jpg')
# 获得尺寸
w, h = im.size
print('长-宽:%s-%s' % (w, h))
# 缩放50%
im.thumbnail((w // 2, h // 2))
print('长-宽:%s-%s' % (w // 2, h // 2))
# 缩放保存
im.save('demo.jpg', 'jpeg')

# 模糊滤镜
im2 = im.filter(ImageFilter.BLUR)
im2.save('demo2.jpg', 'jpeg')

PIL的ImageDraw提供了一系列绘图方法,可以直接绘图。比如要生成字母验证码图片:

from PIL import Image, ImageDraw, ImageFont, ImageFilter
import random


# 随机字母
def rdChar():
    return chr(random.randint(65, 90))


# 随机颜色2
def rdColor():
    return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))


# 随机颜色2
def rdColor2():
    return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))


# 250 * 65
width = 50 * 5
height = 65
image = Image.new('RGB', (width, height), (255, 255, 255))
# Font对象
font = ImageFont.truetype('C:/Windows/Fonts/Arial.ttf', 36)
# Draw对象
draw = ImageDraw.Draw(image)
# 填充每个像素
for x in range(width):
    for y in range(height):
        draw.point((x, y), fill=rdColor())

# 输出文字
for t in range(5):
    draw.text((60 * t + 9, 9), rdChar(), font=font, fill=rdColor2())

# 模糊
image = image.filter(ImageFilter.BLUR)
image.save('code.jpg', 'jpeg')

(二)、requests

requests。它是一个Python第三方库,处理URL资源特别方便。
通过GET访问一个页面:

import requests

r = requests.get('https://new.qq.com/omn/20200310/20200310A0RYZA00.html')
print(r.status_code)
# print(r.text)

# 带参数URL,传入dict做params参数
r1 = requests.get('https://www.douban.com/search', params={'q': 'python', 'cat': '1001'})
print(r1.url)

# requests自动检测编码,可以使用encoding属性查看
print(r1.encoding)

无论响应是文本还是二进制内容,我们都可以用content属性获得bytes对象

print(r.content)

可以直接获取JSON,需要传入HTTP Header时,我们传入一个dict作为headers参数。

r2 = requests.get('https://www.douban.com/', headers={'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit'})
print(r2.text)

发送POST请求,只需要把get()方法变成post(),然后传入data参数作为POST请求的数据:

r3 = requests.post('https://accounts.douban.com/login',
                   data={'form_email': 'abc@example.com', 'form_password': '123456'})

params = {'key': 'value'}
r = requests.post(url, json=params) # 内部自动序列化为JSON

上传文件,requests把它简化成files参数

upload_file = {'file': open('xxx.xls', 'rb')}
r = requests.post(url, files=upload_file)

post()方法替换为put()delete()等,就可以以PUTDELETE方式请求资源,requestsCookie做了特殊处理,不必解析Cookie就可以轻松获取指定的Cookie

c = {'token': '123456', 'status': 'working'}
r = requests.get(url, cookies=c)

(三)、chardet

检测编码,简单易用。
拿到一个bytes时,就可以对其检测编码。用chardet检测编码,只需要一行代码:

import chardet

c = chardet.detect(b'Hello,Python')
print(c)
'''
{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
'''

datas = '天王盖地虎,小鸡炖蘑菇'.encode('gbk')
d = chardet.detect(datas)
print(d)

'''
{'encoding': 'GB2312', 'confidence': 0.7407407407407407, 'language': 'Chinese'}
'''

datas = '天王盖地虎,小鸡炖蘑菇'.encode('utf-8')
d = chardet.detect(datas)
print(d)
'''
{'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}
'''

datas = '主要ニュース'.encode('euc-jp')
d = chardet.detect(datas)
print(d)

'''
{'encoding': 'EUC-JP', 'confidence': 0.99, 'language': 'Japanese'}
'''

(四)、psutil

Python中获取系统信息,跨平台使用,支持Linux/UNIX/OSX/Windows等psutil

  • 获取CPU信息
import psutil

# cpu数量
c_num = psutil.cpu_count()
print(c_num)
# cpu物理核心
c_hx = psutil.cpu_count(logical=False)
print(c_hx)
# 统计CPU的用户/系统/空闲时间
c_time = psutil.cpu_times()
print(c_time)
# 类似top命令的CPU使用率,每秒刷新一次,累计10次
for x in range(10):
    p = psutil.cpu_percent(interval=1, percpu=True)
    print(p)
6
6
scputimes(user=4970.815864, system=1706.5417392999952, idle=59512.0570851, interrupt=77.3920961, dpc=37.752241999999995)
[4.7, 9.4, 15.6, 7.8, 15.6, 17.2]
[7.7, 15.6, 0.0, 6.2, 10.9, 6.3]
[9.4, 9.4, 4.7, 6.3, 7.8, 9.4]
[9.1, 4.6, 3.1, 6.2, 10.8, 9.2]
[7.8, 9.4, 6.2, 9.4, 12.5, 9.4]
[9.4, 10.9, 0.0, 3.1, 17.2, 21.9]
[9.4, 9.4, 1.6, 6.3, 25.0, 17.2]
[6.2, 14.1, 3.1, 6.3, 12.5, 9.4]
[10.8, 9.4, 6.3, 4.7, 9.4, 14.1]
[20.9, 7.8, 10.9, 3.1, 14.1, 14.1]
  • 获取内存信息
    使用psutil获取物理内存和交换内存信息,分别使用:
import psutil

p = psutil.virtual_memory()
print(p)
s = psutil.swap_memory()
print(s)

svmem(total=8467001344, available=4706975744, percent=44.4, used=3760025600, free=4706975744)
sswap(total=16932057088, used=6075719680, free=10856337408, percent=35.9, sin=0, sout=0)
  • 获取磁盘信息
#  磁盘分区信息
ds = psutil.disk_partitions()
print(ds)
# 磁盘使用情况
dsu = psutil.disk_usage('/')
print(dsu)
#  磁盘IO
dsio = psutil.disk_io_counters()
print(dsio)
[sdiskpart(device='C:\\', mountpoint='C:\\', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='D:\\', mountpoint='D:\\', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='E:\\', mountpoint='E:\\', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='F:\\', mountpoint='F:\\', fstype='', opts='cdrom')]
sdiskusage(total=503314378752, used=118400143360, free=384914235392, percent=23.5)
sdiskio(read_count=276350, write_count=246640, read_bytes=7565211648, write_bytes=8022806528, read_time=3129, write_time=589)

  • 获取网络接口
# 获取网络信息
n = psutil.net_io_counters()  # 获取网络读写字节/包个数
print(n)
ntf = psutil.net_if_addrs()  # 获取网络接口信息
print(ntf)
ntfs = psutil.net_if_stats()  # 获取网络接口状态
print(ntfs)
nifo = psutil.net_connections()  # 获取当前网络连接信息
print(nifo)
snetio(bytes_sent=25643627, bytes_recv=292889108, packets_sent=214689, packets_recv=255583, errin=0, errout=0, dropin=0, dropout=0)

{'本地连接': [snicaddr(fa...), snicaddr(...), snicaddr(...), snicaddr(...), snicaddr(...)]}

{'本地连接': snicstats(...), 'Loopback Pseudo-Interface 1': snicstats(...), 'isatap.DHCP HOST': snicstats...)}

[sconn(fd=-1, family=<AddressFamily.AF_INET6: 23>, ......... pid=2784)]

  • 获取进程信息
# 获取进程信息
print(psutil.pids())  # 获取所有进程ID
p = psutil.Process(408)  # 获取指定线程
print(p.name(), p.exe(), p.cwd(), p.cmdline(), p.ppid(), p.parent(), p.children(), p.status(), 				   	 p.username(),p.create_time(), p.cpu_times, p.memory_info(), p.open_files(), p.connections(), p.num_threads(), p.threads(), p.environ())
>>> p.name() # 进程名称
>>> p.exe() # 进程exe路径
>>> p.cwd() # 进程工作目录
>>> p.cmdline() # 进程启动的命令行
>>> p.ppid() # 父进程ID
>>> p.parent() # 父进程
>>> p.children() # 子进程列表
>>> p.status() # 进程状态
>>> p.username() # 进程用户名
>>> p.create_time() # 进程创建时间
>>> p.terminal() # 进程终端
>>> p.cpu_times() # 进程使用的CPU时间
>>> p.memory_info() # 进程使用的内存
>>> p.open_files() # 进程打开的文件
>>> p.connections() # 进程相关网络连接
>>> p.num_threads() # 进程的线程数量
>>> p.threads() # 所有线程信息
>>> p.environ() # 进程环境变量
>>>p.terminate() # 结束进程
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值