可以在PyPI - the Python Package Index 上查找第三方模块,使用pip安装。主要介绍Pillow,requests,chardet,psutil等
Pillow
PIL:Python Imaging Library,是图像处理库,但是仅支持到2.7,兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性。
比如图片压缩和模糊
1 2 3 4 5 6 7 8 9 10 11 12
| from PIL import Image, ImageFilter
img = Image.open('D:/oldimg.jpg') w = img.width h = img.height print(w, h) img.thumbnail((w//2, h//2))
img.filter(ImageFilter.BLUR) img.save('D:/newimg.jpg')
|
requests
requests 是一个第三方库,处理资源特别方便。
使用requests
requests自动检测编码,可以使用encoding属性查看
无论响应是文本还是二进制内容,我们都可以用content属性获得bytes对象
对于特定类型的响应,例如JSON,可以直接获取 ‘r.json()’
需要传入HTTP Header时,我们传入一个dict作为headers参数
requests默认使用application/x-www-form-urlencoded对POST数据编码。如果要传递JSON数据,可以直接传入json参数
1 2
| params = {'key': 'value'} r = requests.post(url, json=params)
|
上传文件需要更复杂的编码格式,但是requests把它简化成files参数
1 2
| >>> upload_files = {'file': open('report.xls', 'rb')} >>> r = requests.post(url, files=upload_files)
|
在读取文件时,注意务必使用'rb'即二进制模式读取,这样获取的bytes长度才是文件的长度。
requests对Cookie做了特殊处理,使得我们不必解析Cookie就可以轻松获取指定的Cookie:
要指定超时,传入以秒为单位的timeout参数
1
| r = requests.get(url, timeout=2.5) # 2.5秒后超时
|
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import requests
reqHeader = {'User-Agent':'chrome'}
r = requests.get('https://www.baidu.com/') print(r.status_code) headers = r.headers for k, v in headers.items(): print(k, '=', v)
print(r.headers['Date'])
cookies = r.cookies print('输出cookie信息') for cookie in cookies: print(cookie.name, ':', cookie.value)
print(r.encoding)
|
chardet
虽然Python提供了Unicode表示的str和bytes两种数据类型,并且可以通过encode()和decode()方法转换,但是,在不知道编码的情况下,对bytes做decode()不好做。
对于未知编码的bytes,要把它转换成str,需要先“猜测”编码。猜测的方式是先收集各种编码的特征字符,根据特征字符判断,就能有很大概率“猜对”。
chardet 用来检测编码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| >>> import chardet >>> chardet.detect(b'12ass') {'encoding': 'ascii', 'confidence': 1.0, 'language': ''} >>> chardet.detect('中国'.encode()) {'encoding': 'utf-8', 'confidence': 0.7525, 'language': ''} >>> chardet.detect('中国'.encode('GB2312')) {'encoding': 'IBM855', 'confidence': 0.7679697235616183, 'language': 'Russian'} >>> chardet.detect('中国'.encode('GBK')) {'encoding': 'IBM855', 'confidence': 0.7679697235616183, 'language': 'Russian'} >>> chardet.detect('中国'.encode('utf-8')) {'encoding': 'utf-8', 'confidence': 0.7525, 'language': ''} >>> >>> >>> chardet.detect('こんにちは'.encode('utf-8')) {'encoding': 'utf-8', 'confidence': 0.99, 'language': ''} >>> chardet.detect('こんにちは'.encode('EUC-JP')) {'encoding': 'EUC-JP', 'confidence': 0.99, 'language': 'Japanese'} >>> >>>
|
confidence 字段, 表示检测的概率, 最高是1.0
psutil
用Python来编写脚本简化日常的运维工作是Python的一个重要用途。psutil = process and system utilities,它不仅可以通过一两行代码实现系统监控,还可以跨平台使用。
获取cpu信息
1 2 3 4 5 6
| >>> import psutil >>> psutil.cpu_count() 8 >>> psutil.cpu_count(logical=False) 4 # "4核8线程"是指一个处理器(CPU)具有4个物理核心和8个线程。
|
其他的方法可以查看文档。 psutil