总结几个非常实用的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和IPython中使用Docker
Apr 28 Python
Python分治法定义与应用实例详解
Jul 28 Python
Python数据结构与算法之字典树实现方法示例
Dec 13 Python
Python使用matplotlib绘制正弦和余弦曲线的方法示例
Jan 06 Python
Python实现确认字符串是否包含指定字符串的实例
May 02 Python
Python3.4学习笔记之列表、数组操作示例
Mar 01 Python
python 基于TCP协议的套接字编程详解
Jun 29 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
Jan 02 Python
python同义词替换的实现(jieba分词)
Jan 21 Python
flask框架自定义url转换器操作详解
Jan 25 Python
Django --Xadmin 判断登录者身份实例
Jul 03 Python
Python常用模块函数代码汇总解析
Aug 31 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/09/28 PHP
php获取数组元素中头一个数组元素值的实现方法
2014/12/20 PHP
Yii+upload实现AJAX上传图片的方法
2016/07/13 PHP
PHP命名空间namespace及use的简单用法分析
2018/08/03 PHP
PHP http请求超时问题解决方案
2020/11/13 PHP
JavaScript 特殊字符
2007/04/05 Javascript
JavaScript 开发工具webstrom使用指南
2014/12/09 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
2015/10/12 Javascript
JS日期加减,日期运算代码
2015/11/05 Javascript
Node.js开发者必须了解的4个JS要点
2016/02/21 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
2017/01/24 Javascript
微信小程序 引用其他js文件实现代码
2017/02/22 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
详解vue中引入stylus及报错解决方法
2017/09/22 Javascript
react脚手架如何配置less和ant按需加载的方法步骤
2018/11/28 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
2019/03/14 Javascript
layui递归实现动态左侧菜单
2019/07/26 Javascript
JavaScript实现图片轮播特效
2019/10/23 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
Python中字符串对齐方法介绍
2015/05/21 Python
Python基于回溯法解决01背包问题实例
2017/12/06 Python
Python画柱状统计图操作示例【基于matplotlib库】
2018/07/04 Python
python基础学习之如何对元组各个元素进行命名详解
2018/07/12 Python
pytorch常见的Tensor类型详解
2020/01/15 Python
简单的Python人脸识别系统
2020/07/14 Python
python爬虫筛选工作实例讲解
2020/11/23 Python
Myprotein台湾官方网站:全球领先的运动营养品牌
2018/12/10 全球购物
美国中西部家用医疗设备商店:Med Mart(轮椅、踏板车、升降机等)
2019/04/26 全球购物
华美博弈C/VC工程师笔试试题
2012/07/16 面试题
如何提高SQL Server的安全性
2016/07/25 面试题
音乐兴趣小组活动总结
2014/07/07 职场文书
教学改革问题查摆整改措施
2014/09/27 职场文书
群众路线剖析材料怎么写
2014/10/09 职场文书
2015年餐厅服务员工作总结
2015/04/23 职场文书
redis三种高可用方式部署的实现
2021/05/11 Redis