首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python3 Python 常用内建模块

本系列主要学习Python的基本使用和语法知识,后续可能会围绕着AI学习展开。

Python3 (1) Python语言的简介

Python3 (2) Python语法基础

Python3 (3) Python函数

Python3 (4) Python高级特性

Python3 (5) Python 函数式编程

Python3 (6) Python 模块

Python3 (7) Python 面向对象编程

Python3 (8) Python 面向对象高级编程

Python3 (9) Python 错误、调试和测试

Python3 (10) Python IO编程

Python3 (11) Python 进程和线程

Python3 (12) Python 常用内建模块

Python 中有一些内置的函数无需额外安装和配置,即可直接使用,这就是python的内置模块。这篇比较简单,主要去熟悉一下有哪些常见的内置模块,具体开发的时候心中有数。

datetime

与时间有关的,是处理日期和时间的标准库。

获取当前日期和时间

输出结果:

获取指定日期和时间

输出结果:

datetime转换为timestamp

时间戳这个概念,应该对应上计算机的时间规则:1970年1月1日 00:00:00 UTC+00:00时区的时刻称为epoch time,记为0,当前时间就是相对于epoch time的秒数,称为timestamp:

输出结果:

Python的timestamp是一个浮点数。如果有小数位,小数位表示毫秒数,java 中的timestamp使用整数表示毫秒数,我们只需要把timestamp除以1000就得到Python的浮点表示方法。

timestamp转换为datetime

由时间戳转化成时间的格式 :

输出结果:

通过转化的时间,是针对当前操作系统的时区。转化的是标准时间。

str转换为datetime

str转换为datetime:

输出结果:

转换后的datetime是没有时区信息的,并且参数是时间的格式,Python中内置了好多格式,具体参考官方文档。

datetime加减运算

在Python 中,对时间的加减运算可以直接通过、运算,但是不能直接加数字,应该转换成对象。

输出结果:

本地时间转换为UTC时间

本地时间是指系统设定时区的时间,如北京时间是UTC+8:00时区的时间,而UTC时间指UTC+0:00时区的时间。类型有一个时区属性,但是默认为,可以强行给设置一个时区,如果没有设置是不知道是哪个时区的。

输出结果:

时区转换

Python中可以直接获取到当前时间的标准时间(UTC),然后可以通过切换成其他时区的时间。

输出结果:

时区转换的关键在于,拿到一个datetime时,要获知其正确的时区,然后强制设置时区,作为基准时间。如果不知道当前时区,就去找 UTC 标准时间,并强制设置时区为,带时区的通过方法,可以转换到任意时区,不是必须从时区转换到其他时区,任何带时区的都可以正确转换。

最后我们要存储时间,一般用转成进行存储。这里时间的扩展类就写完了,我们可以根据具体的情况来进行选择使用。

collections

collections是Python内建的一个集合模块,提供了许多有用的集合类。

namedtuple

namedtuple是一个函数,返回一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素。

输出结果:

根据具体的应用场景,通过事物的属性定义不同的对象。使表达的的事物更加的形象具体。

deque

首先双端队列的出现是解决单向列表结构,对插入、删除操作效率低的问题。双端队列:采用双向列表结构,更高效实现插入和删除操作。适合用于队列和栈。

输出结果:

除了实现的和外,还支持和,这样就可以非常高效地往头部添加或删除元素。

defaultdict

使用时,如果引用的不存在,就会抛出。如果希望不存在时,返回一个默认值,应用而生。

输出结果:

默认值是调用函数返回的,而函数在创建defaultdict对象时传入。除了在Key不存在时返回默认值,defaultdict的其他行为跟dict是完全一样的。

OrderedDict

使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序如果要保持Key的顺序,可以用OrderedDict:

输出结果:

使用的Key会按照插入的顺序排列,不是Key本身排序。 我们可以通过实现一个FIFO(先进先出)的dict。

输出结果:

从输出的数据我们可以清楚的看到数据的插入删除顺序,实现了先进先出的FIFO 队列。

Counter

Counter作为一个简单的计数器,例如:我们来统计字符出现的次数:

输出结果:

从输出的结果我们可以看出,Counter 其实是一个dict 子类,通过循环来找到字符的出现次数。

这里集合类的扩展类我们说完了。可以根据实际情况来进行使用。

base64

在开发中我们经常会通过将图片转成作为字符串上传等,在Python中也存在。今天我们系统的来学习一下的组成。

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

对二进制数据进行处理,每3个字节一组,一共是3x8=24bit,划为4组,每组正好6个bit,这样我们得到4个数字作为索引,然后查表,获得相应的4个字符,就是编码后的字符串。Base64编码会把3字节的二进制数据编码为4字节的文本数据,长度增加33%,如果要编码的二进制数据不是3的倍数,Base64用\x00字节在末尾补足后,再在编码的末尾加上1个或2个=号,表示补了多少字节,解码的时候,会自动去掉。

输出结果:

在 中提供了一种的编码,其实就是把字符和分别变成和使其可以在中安全拼接。

是一种任意二进制到文本字符串的编码方法,常用于在、、网页中传输少量二进制数据。

输出结果:

因为用在、里面会造成歧义,所以,很多编码后会把去掉,因为是把3个字节变为4个字节,所以,编码的长度永远是4的倍数,因此,需要加上 把字符串的长度变为4的倍数,我们可以通过上面的方法解析。

struct

在Python提供了一个struct模块来解决bytes和其他二进制数据类型的转换。

输出结果:

模块定义的数据类型可以参考Python官方文档:https://docs.python.org/3/library/struct.html#format-characters

我们通过一个demo 来练习的使用:

输出结果:

以上验证了一个文件是否是位图文件,如果是,打印出图片大小和颜色数。

hashlib

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

输出结果:

我们通过 生成的128 bit字节,通常用一个32位的16进制字符串表示,两个我们只是去掉一个符号,就生成差别非常大的两个不同字符串,所以我们经常通过 加密,为了确保密码的更加安全也可以在加密前加上盐,使一些常见的密码更加的安全。

输出结果:

这是算法,生成的是一个160 bit字节,通常用一个40位的16进制字符串表示,比SHA1更安全的算法是SHA256和SHA512,不过越安全的算法不仅越慢,而且摘要长度更长。

hmac

算法:通过一个标准算法,在计算哈希的过程中,把key混入计算过程中,适用于所有的哈希算法,如 MD5、SHA-1等。使用如下:

输出结果:

其实 算法就是将混入MD5算法中,得出一个有口令的值,达到防止黑客破解的作用。

itertools

的内建模块提供了非常有用的用于操作迭代对象的函数。

“无限”迭代器

中提供了几个无限迭代器,如: 、、。

count 创建一个无限迭代器,传入的是初始值。

输出结果:

cycle() 创建一个无限迭代器,传入的是一个序列,会无限的循环序列

输出结果:

cycle() 创建一个无限迭代器,传入的是一个元素,会无限的循环元素,第二个参数也可以传入循环的次数

输出结果:

chain()

chain()可以把一组迭代对象串联起来,形成一个更大的迭代器:

输出结果:

groupby()

把迭代器中相邻的重复元素挑出来放在一起:

输出结果:

Python中的模块还有许多有用的函数,通过这些函数创建出来的是,而不是。

contextlib

在中并不是只有函数返回的对象才能使用语句。实际上,任何对象,只要正确实现了上下文管理,就可以用于语句。contextlib模块提供了和来快捷的实现上下文管理。

输出结果:

让我们通过编写generator来简化上下文管理。也可以使用,他其实是经过装饰的。

输出结果:

通过快速的解析到每一行代码。

contextlib模块还提供了很多好用的装饰器。

urllib

urllib提供了一系列用于操作URL的功能。

Get

urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应:使得网络抓取在python中非常的简单,下面我们抓取一个网址:

输出结果:

可以看到HTTP响应的头和JSON数据。如果我们要模拟浏览器来访问,一般会设计到,并在其上添加头部信息,如下:

输出结果:

从截取的部分数据来看,我们模拟的是手机端的首页。

Post

如果要以POST发送一个请求,只需要把参数data以bytes形式传入。我们来模拟一下微博的登录

输出结果:

Handler

如果还需要更复杂的控制,比如通过一个Proxy去访问网站,我们需要利用ProxyHandler来处理,示例代码如下:

urllib提供的功能就是利用程序去执行各种HTTP请求。如果要模拟浏览器完成特定功能,需要把请求伪装成浏览器。伪装的方法是先监控浏览器发出的请求,再根据浏览器的请求头来伪装。

XML

在没有流行起来是,中应用中还采用的格式, 的解析有两种方式、 。中提供了专门的解析方法。

DOM vs SAX

操作XML有两种方法:DOM和SAX。DOM会把整个XML读入内存,解析为树,因此占用内存大,解析慢,优点是可以任意遍历树的节点。SAX是流模式,边读边解析,占用内存小,解析快,缺点是我们需要自己处理事件,正常情况下,优先考虑SAX,因为DOM实在太占内存。

在Python中使用SAX解析XML非常简洁,通常我们关心的事件是start_element,end_element和char_data,准备好这3个函数,然后就可以解析xml了。如下:

输出结果:

解析XML时,注意找出自己感兴趣的节点,响应事件时,把节点数据保存起来。解析完毕后,就可以处理数据。

HTMLParser

如何解析该HTML页面,我们用爬虫把目标网站的页面抓下来,然后就是解析HTML,因为HTML本质上是XML的子集,但是HTML的语法没有XML那么严格,所以不能用标准的DOM或SAX来解析HTML。所以Python提供了HTMLParser来非常方便地解析HTML,如下:

输出结果:

解析过程中,feed()方法可以多次调用,也就是不一定一次把整个HTML字符串都塞进去,可以一部分一部分塞进去。特殊字符有两种,一种是英文表示的 ,一种是数字表示的Ӓ,这两种字符都可以通过Parser解析出来。

利用HTMLParser,可以把网页中的文本、图像等解析出来。

在这里我们基本上把python中内置模块的部分重要的方法和用法讲解了,但是还有好多都没有提到,在实践中可以通过官方文档,采用最优的方法解决具体问题。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180207A16GKV00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券