总结几个非常实用的Python库


Posted in Python onJune 26, 2021

自带库

一、datetime

datetime是Python处理日期和时间的标准库。

1、获取当前日期和时间

>>> from datetime import datetime

>>> now = datetime.now()

>>> print(now)

2021-06-14 09:33:10.460192

>>> print(type(now))

<class 'datetime.datetime'>

2、获取指定日期和时间

>>> from datetime import datetime

>>> dt = datetime(2021,6,10,12,0)

>>> print(dt)

2021-06-10 12:00:00

3、datetime转换为timestamp

在计算机中,时间实际上是用数字表示的。我们把1970年1月1日 00:00:00 UTC+00:00时区的时刻称为epoch time,记为0(1970年以前的时间timestamp为负数),当前时间就是相对于epoch time的秒数,称为timestamp(时间戳)。

>>> from datetime import datetime

>>> now = datetime.now()

>>> now

datetime.datetime(2021, 6, 14, 9, 38, 34, 969006)

>>> now.timestamp()	#把datetime转换为timestamp

1623634714.969006

4、timestamp转换为datetime

>>> from datetime import datetime

>>> timestamp = 1623634714.969006

>>> print(datetime.fromtimestamp(timestamp))

2021-06-14 09:38:34.969006

5、str转换为datetime

>>> from datetime import datetime

>>> day = datetime.strptime('2021-6-10 12:12:12','%Y-%m-%d %H:%M:%S')

>>> print(day)

2021-06-10 12:12:12

6、datetime转换为str

>>> from datetime import datetime

>>> now = datetime.now()

>>> print(now)

2021-06-14 09:49:02.281820

>>> print(type(now))

<class 'datetime.datetime'>

>>> str_day = now.strftime('%Y-%m-%d %H:%M:%S')

>>> print(str_day)

2021-06-14 09:49:02

>>> print(type(str_day))

<class 'str'>

二、collections

collections是Python内建的一个集合模块,提供了许多有用的集合类,其中统计功能非常实用。

Counter

Counter是一个简单的计数器,例如,统计字符出现的个数

>>> from collections import Counter

>>> c = Counter()

>>> str = 'jdkjefwnewnfjqbefbqbefqbferbb28934`83278784727'

>>> c.update(str)

>>> c

Counter({'b': 6, 'e': 5, 'f': 5, '8': 4, '7': 4, 'j': 3, 'q': 3, '2': 3, 'w': 2, 'n': 2, '3': 2, '4': 2, 'd': 1, 'k': 1, 'r': 1, '9': 1, '`': 1})

三、base64

Base64是一种用64个字符来表示任意二进制数据的方法。

用记事本打开exejpgpdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法。Base64是一种最常见的二进制编码方法。

>>> import base64
>>> base64.b64encode(b'binary\x00string')
b'YmluYXJ5AHN0cmluZw=='
>>> base64.b64decode(b'YmluYXJ5AHN0cmluZw==')
b'binary\x00string'

四、hashlib

Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。

什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。

我们以常见的摘要算法MD5为例,计算出一个字符串的MD5值:

>>> import hashlib

>>> md5 = hashlib.md5()

>>> md5.update("程序员唐丁".encode('utf-8'))

>>> print(md5.hexdigest())

05eb21a61d2cf0cf84e474d859c4c055

摘要算法能应用到什么地方?举个常用例子:

任何允许用户登录的网站都会存储用户登录的用户名和口令。如何存储用户名和口令呢?方法是存到数据库表中。如果以明文保存用户口令,如果数据库泄露,所有用户的口令就落入黑客的手里。此外,网站运维人员是可以访问数据库的,也就是能获取到所有用户的口令。正确的保存口令的方式是不存储用户的明文口令,而是存储用户口令的摘要,比如MD5,当用户登录时,首先计算用户输入的明文口令的MD5,然后和数据库存储的MD5对比,如果一致,说明口令输入正确,如果不一致,口令肯定错误。

第三方库

一、requests

requests是一个Python第三方库,处理URL资源特别方便。在之前的”爬虫简介“文章中我们已经初步认识了它。

1、安装requests

如果安装了Anaconda,requests就已经可用了。否则,需要在命令行下通过pip安装:

$ pip install requests

如果遇到Permission denied安装失败,请加上sudo重试。

2、通过GET访问豆瓣首页,只需要几行代码:

>>> import requests
>>> r = requests.get('https://www.douban.com/') # 豆瓣首页
>>> r.status_code
200
>>> r.text
r.text
'<!DOCTYPE HTML>\n<html>\n<head>\n<meta name="description" content="提供图书、电影、音乐唱片的推荐、评论和...'

3、对于带参数的URL,传入一个dict作为params参数:

>>> r = requests.get('https://www.douban.com/search', params={'q': 'python', 'cat': '1001'})
>>> r.url # 实际请求的URL
'https://www.douban.com/search?q=python&cat=1001'

4、requests自动检测编码,可以使用encoding属性查看:

>>> r.encoding
'utf-8'

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

>>> r.content
b'<!DOCTYPE html>\n<html>\n<head>\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8">\n...'

6、requests的方便之处还在于,对于特定类型的响应,例如JSON,可以直接获取:

>>> r = requests.get('https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20%3D%202151330&format=json')
>>> r.json()
{'query': {'count': 1, 'created': '2017-11-17T07:14:12Z', ...

7、需要传入HTTP Header时,我们传入一个dict作为headers参数:

>>> r = requests.get('https://www.douban.com/', headers={'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit'})
>>> r.text
'<!DOCTYPE html>\n<html>\n<head>\n<meta charset="UTF-8">\n <title>豆瓣(手机版)</title>...'

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

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

9、requests默认使用application/x-www-form-urlencoded对POST数据编码。如果要传递JSON数据,可以直接传入json参数:

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

10、类似的,上传文件需要更复杂的编码格式,但是requests把它简化成files参数:

>>> upload_files = {'file': open('report.xls', 'rb')}
>>> r = requests.post(url, files=upload_files)

在读取文件时,注意务必使用'rb'即二进制模式读取,这样获取的bytes长度才是文件的长度。

post()方法替换为put()delete()等,就可以以PUT或DELETE方式请求资源。

11、除了能轻松获取响应内容外,requests对获取HTTP响应的其他信息也非常简单。例如,获取响应头:

>>> r.headers
{Content-Type': 'text/html; charset=utf-8', 'Transfer-Encoding': 'chunked', 'Content-Encoding': 'gzip', ...}
>>> r.headers['Content-Type']
'text/html; charset=utf-8'

12、requests对Cookie做了特殊处理,使得我们不必解析Cookie就可以轻松获取指定的Cookie:

>>> r.cookies['ts']
'example_cookie_12345'

13、要在请求中传入Cookie,只需准备一个dict传入cookies参数:

>>> cs = {'token': '12345', 'status': 'working'}
>>> r = requests.get(url, cookies=cs)

14、最后,要指定超时,传入以秒为单位的timeout参数:

>>> r = requests.get(url, timeout=2.5) # 2.5秒后超时

二、chardet

字符串编码一直是令人非常头疼的问题,尤其是我们在处理一些不规范的第三方网页的时候。虽然Python提供了Unicode表示的strbytes两种数据类型,并且可以通过encode()decode()方法转换,但是,在不知道编码的情况下,对bytesdecode()不好做。

对于未知编码的bytes,要把它转换成str,需要先“猜测”编码。猜测的方式是先收集各种编码的特征字符,根据特征字符判断,就能有很大概率“猜对”。

当然,我们肯定不能从头自己写这个检测编码的功能,这样做费时费力。chardet这个第三方库正好就派上了用场。用它来检测编码,简单易用。

1、安装chardet

如果安装了Anaconda,chardet就已经可用了。否则,需要在命令行下通过pip安装:

$ pip install chardet

如果遇到Permission denied安装失败,请加上sudo重试。

2、当我们拿到一个bytes时,就可以对其检测编码。用chardet检测编码,只需要一行代码:

>>> chardet.detect(b'Hello, world!')
{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}

三、psutil

用Python来编写脚本简化日常的运维工作是Python的一个重要用途。在Linux下,有许多系统命令可以让我们时刻监控系统运行的状态,如pstopfree等等。要获取这些系统信息,Python可以通过subprocess模块调用并获取结果。但这样做显得很麻烦,尤其是要写很多解析代码。

在Python中获取系统信息的另一个好办法是使用psutil这个第三方模块,它不仅可以通过一两行代码实现系统监控,还可以跨平台使用,支持Linux/UNIX/OSX/Windows等,是系统管理员和运维小伙伴不可或缺的必备模块。

1、安装psutil

如果安装了Anaconda,psutil就已经可用了。否则,需要在命令行下通过pip安装:

$ pip install psutil

如果遇到Permission denied安装失败,请加上sudo重试。

2、获取CPU信息

我们先来获取CPU的信息:

>>> import psutil
>>> psutil.cpu_count() # CPU逻辑数量
4
>>> psutil.cpu_count(logical=False) # CPU物理核心
2
# 2说明是双核超线程, 4则是4核非超线程

3、统计CPU的用户/系统/空闲时间:

>>> psutil.cpu_times()
scputimes(user=10963.31, nice=0.0, system=5138.67, idle=356102.45)

4、获取内存信息

使用psutil获取物理内存和交换内存信息,分别使用:

>>> psutil.virtual_memory()
svmem(total=8589934592, available=2866520064, percent=66.6, used=7201386496, free=216178688, active=3342192640, inactive=2650341376, wired=1208852480)
>>> psutil.swap_memory()
sswap(total=1073741824, used=150732800, free=923009024, percent=14.0, sin=10705981440, sout=40353792)

返回的是字节为单位的整数,可以看到,总内存大小是8589934592 = 8 GB,已用7201386496 = 6.7 GB,使用了66.6%。

而交换区大小是1073741824 = 1 GB。

5、获取磁盘信息

可以通过psutil获取磁盘分区、磁盘使用率和磁盘IO信息:

>>> psutil.disk_partitions() # 磁盘分区信息
[sdiskpart(device='/dev/disk1', mountpoint='/', fstype='hfs', opts='rw,local,rootfs,dovolfs,journaled,multilabel')]
>>> psutil.disk_usage('/') # 磁盘使用情况
sdiskusage(total=998982549504, used=390880133120, free=607840272384, percent=39.1)
>>> psutil.disk_io_counters() # 磁盘IO
sdiskio(read_count=988513, write_count=274457, read_bytes=14856830464, write_bytes=17509420032, read_time=2228966, write_time=1618405)

好了,就先介绍这么多吧,更多实用的Python库后面唐丁再给大家一一介绍

到此这篇关于总结几个非常实用的Python库的文章就介绍到这了,更多相关Python库内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python格式化压缩后的JS文件的方法
Mar 05 Python
使用django-crontab实现定时任务的示例
Feb 26 Python
Python实现类似比特币的加密货币区块链的创建与交易实例
Mar 20 Python
PyTorch上实现卷积神经网络CNN的方法
Apr 28 Python
Python使用pandas处理CSV文件的实例讲解
Jun 22 Python
对python捕获ctrl+c手工中断程序的两种方法详解
Dec 26 Python
Python操作配置文件ini的三种方法讲解
Feb 22 Python
pandas 使用均值填充缺失值列的小技巧分享
Jul 04 Python
浅析Windows 嵌入python解释器的过程
Jul 26 Python
详解如何在PyCharm控制台中输出彩色文字和背景
Aug 17 Python
Python读取图像并显示灰度图的实现
Dec 01 Python
Python实现对齐打印 format函数的用法
Apr 28 Python
手残删除python之后的补救方法
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
Python Pandas模块实现数据的统计分析的方法
Jun 24 #Python
FP-growth算法发现频繁项集——发现频繁项集
能让Python提速超40倍的神器Cython详解
Jun 24 #Python
FP-growth算法发现频繁项集——构建FP树
python ansible自动化运维工具执行流程
You might like
php图片加水印原理(超简单的实例代码)
2013/01/18 PHP
php生成随机密码自定义函数代码(简单快速)
2014/05/10 PHP
ThinkPHP有变量的where条件分页实例
2014/11/03 PHP
再Docker中架设完整的WordPress站点全攻略
2015/07/29 PHP
数组任意位置插入元素,删除特定元素的实例
2017/03/02 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
JavaScript DOM 学习第五章 表单简介
2010/02/19 Javascript
js弹出框轻量级插件jquery.boxy使用介绍
2013/01/15 Javascript
jQuery实现简单的间隔向上滚动效果
2015/03/09 Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
2015/12/10 Javascript
js实现页面a向页面b传参的方法
2016/05/29 Javascript
AngularJS路由切换实现方法分析
2017/03/17 Javascript
IntersectionObserver实现图片懒加载的示例
2017/09/29 Javascript
Angular 开发学习之Angular CLI的安装使用
2017/12/31 Javascript
微信小程序将字符串生成二维码图片的操作方法
2018/07/17 Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
2019/04/17 Javascript
vue项目前端知识点整理【收藏】
2019/05/13 Javascript
vue-cli在 history模式下的配置详解
2019/11/26 Javascript
vue 输入电话号码自动按3-4-4分割功能的实现代码
2020/04/30 Javascript
[46:43]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第三局
2016/02/28 DOTA
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
探寻python多线程ctrl+c退出问题解决方案
2014/10/23 Python
Python手机号码归属地查询代码
2016/05/04 Python
python 判断是否为正小数和正整数的实例
2017/07/23 Python
python中使用zip函数出现错误的原因
2018/09/28 Python
说说如何遍历Python列表的方法示例
2019/02/11 Python
详解Python 定时框架 Apscheduler原理及安装过程
2019/06/14 Python
对于Python深浅拷贝的理解
2019/07/29 Python
python基于K-means聚类算法的图像分割
2019/10/30 Python
基于Python 的语音重采样函数解析
2020/07/06 Python
聊聊python在linux下与windows下导入模块的区别说明
2021/03/03 Python
L’Artisan Parfumeur官网:法国香水品牌
2020/08/11 全球购物
年度安全生产目标责任书
2014/07/23 职场文书
2014银行授权委托书样本
2014/10/04 职场文书
优秀党员先进材料
2014/12/18 职场文书
iPhone13 Pro外观确定,升级4800万镜头,4月20日发新品
2021/04/15 数码科技