一分钟了解几个非常实用的Python库
Python一直被自称“batteries included”,就是因为内置了许多非常有用的模块,无需额外安装和配置,即可直接使用。
除了内建的模块外,Python还有大量的第三方模块,直接使用pip安装即可使用。下面给大家简单介绍几个Python非常实用的自带库和第三方库。
自带库
一、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()>>> nowdatetime.datetime(2021, 6, 14, 9, 38, 34, 969006)>>> now.timestamp() #把datetime转换为timestamp1623634714.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)>>> cCounter({'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个字符来表示任意二进制数据的方法。
用记事本打开exe
、jpg
、pdf
这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法。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表示的str
和bytes
两种数据类型,并且可以通过encode()
和decode()
方法转换,但是,在不知道编码的情况下,对bytes
做decode()
不好做。
对于未知编码的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下,有许多系统命令可以让我们时刻监控系统运行的状态,如ps
,top
,free
等等。要获取这些系统信息,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,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识. 那么针对这三类人,我给大家提供 ...
- 很冷门,但非常实用的 Python 库
Python是一种很棒的编程语言.事实上,它还是世界上发展最快的编程语言之一.它一次又一次证明了它在数据科学职位中的实用性.整个Python及其库的生态系统使其成为全世界用户(初学者和高级)的合适选择 ...
- 这十个不常见但却十分实用的Python库,你知道几个?
Python是一门神奇的语言,它是世界上发展最快的编程语言之一,尤其在数据科学方面的作用大家是有目共睹,Python的整个生态系统和它的库使它成为全世界用户(初学者和高级用户)的最佳选择.它的成功和流 ...
- 长知识了!这8个很少用但却很实用的 Python 库真棒!
欢迎关注 ,专注Python.数据分析.数据挖掘.好玩工具! 本文介绍一些我们可能很少听过,但是对于特定问题或者特定任务来说,却非常实用的工具包,文末提供技术交流群,欢迎大家一起学习讨论. 为了配合上 ...
- 非常实用的 Python 库,推一次火一次
原文地址:https://dwz.cn/FBj1Ktxv 译文链接:https://dwz.cn/moEU7xzr Python 是一个很棒的语言.它是世界上发展最快的编程语言之一.它一次又一次地证明 ...
- garch预测 python_安利几个非常实用的 Python 库
Python 是一个很棒的语言.它是世界上发展最快的编程语言之一.它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性.整个 Python 及其库的生态系统使它成为全世界用户(初学者和 ...
- python 可视化界面_给大家分享一些实用的Python库
halo,大家好,我是特仑苏,今天给大家分享一些Python库,希望可以给大家带来一些用处! 原作者:http://itGap.ru 原出处:作品文(十大主要Python库)/网站名称(zen.yan ...
- python 模糊匹配_很冷门,但非常实用的 Python 库
Python 是一个很棒的语言.它是世界上发展最快的编程语言之一.它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性.整个 Python 及其库的生态系统使它成为全世界用户(初学者和 ...
- 非常实用的Python库
Python 是一个很棒的语言.它是世界上发展最快的编程语言之一.它一次又一次地证明了在开发人员职位中和跨行业的数据科学职位中的实用性.整个 Python 及其库的生态系统使它成为全世界用户(初学者和 ...
最新文章
- 特别推荐:RHCE考试经验
- 2019年春季学期第三周作业
- php+实现群发微信模板消息_php实现发送微信模板消息的方法,php信模板消息_PHP教程...
- 解决Ubuntu终端编辑时上下左右变成ABCD问题
- linux下shell编程课程设计,Linux下shell编程实例
- java面向对象数组_Java面向对象的构造器与数组对象
- docker 安装mysql_安装docker并使用docker安装mysql
- wordpress插件列表
- HTML 动画(一)
- 复合视频信号CVBS解析
- 正交试验案例分析全步骤
- 0055-在OpenCV环境下合成高动态范围图像(HDR)
- oracle保留小数位数
- Spring boot与Spring cloud
- 正好在线炒股医美概念涨幅居前
- 树莓派3b+串口配置
- python游戏背景音乐循环播放_9.2 播放背景音乐_师傅带徒弟学:Python视频课程之游戏开发引擎Cocos2d-Python_Python视频-51CTO学院...
- project导出html格式,前端导出xslx.html
- 串口的空闲中断+DMA接收(附F4代码)
- 陌生人邀请我加入CS:GO游戏,我一接受就被盗号了
热门文章
- python忽略大小写_Python字符串忽略大小写实现搜索和替换
- 苹果android什么意思,从苹果换到安卓是什么体验?不妨看看这些iPhone用户的说法...
- Android登录注册功能加密处理
- 麻瓜 | 数学建模日记 | 第一天
- Java—文件I/O操作
- python ttfont_58 字体反爬攻略 python3
- 机器学习算法输入输出概览与调节参数速查
- Windows 上安装搭建redis环境出现的问题
- maven基础01环境环境搭建及配置部署
- leetcode:45. 跳跃游戏 II【经典贪心】