前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 常用模块

Python 常用模块

作者头像
星哥玩云
发布2022-09-08 12:41:10
4980
发布2022-09-08 12:41:10
举报
文章被收录于专栏:开源部署

一、time模块

名词 UTC(世界协调时间):格林尼治时间,世界标准时间,在中国为UTC+8

DST(夏令时):是一种为了节约能源而人为规定地方时间的制度,一般在天亮早的夏季将时间提前一小时

时间的表示形式

  • 时间戳 以整型或浮点型表示的是一个以秒为单位的时间间隔,这个时间的基础值是1970年1月1号零时开始算
  • 元组 一种python的数据结构表示方式,这个元组有9个整数元素,分别表示不同的时间含义 year 年 month(1-12) 月 day(1-31) 日 hours(0-23) 时 minutes(0-59) 分 seconds(0-59) 秒 weekday(0-6,0表示星期一) 周 Julian day(1-366):表示当前日期在本年度是第几天 DST flag(-1 or 0 or 1):夏令时格式,0表示正常格式,1表示夏令时格式,-1表示根据当前的时间格式来判定
  • 格式化字符串

格式化字符

含义

%a

本地简化星期名称

%A

本地完整星期名称

%b

本地简化月份名称

%B

本地完整月份名称

%c

本地相应的日期和时间表示

%d

一个月中的第几天(01-31)

%H

一天中的第几个小时(24时制,00-23)

%I

一天中的第几个小时(12时制,01-12

%j

一年中的第几天(001-366)

%m

月份(01-12)

%M

分钟数(00-59)

%p

本地am或者pm的响应符号

%S

秒(00-59)

%U

一年中的星期数,以星期日为一个星期

%w

一个星期中的第几天(0-6,0表示星期日)

%W

和%U基本相同,以星期一为一个星期

%x

本地相应的日期

%X

本地相应的时间

%y

去掉世纪的年份(00-99)

%Y

完整的年份

%Z

时区的名字,如果不存在为空字符串

导入

代码语言:javascript
复制
import time

方法

time()

返回当前时间的时间戳,无需参数,返回值为浮点型

代码语言:javascript
复制
t1 = time.time()
print(t1)

gmtime([t])

将给定的时间戳转为UTC时间元组,如果没有参数默认转换当前时间戳

代码语言:javascript
复制
t2 = time.gmtime()
print(t2)

localtime([t])

将给定的时间戳转为本地时间元组格式,如果没有参数默认转换当前时间戳

代码语言:javascript
复制
t3 = time.localtime()
print(t3)

mktime(tt)

将本地时间元组转为时间戳

代码语言:javascript
复制
t4 = time.mktime(t3)
print(t4)

asctime([tt])

将时间元组格式转为指定格式的字符串形式,如果没有参数默认使用localtime时间的时间元组

代码语言:javascript
复制
t5 = time.asctime(t3)
print(t5, type(t5))

ctime([tt])

将时间戳格式转为指定格式的字符串形式,如果没有参数默认使用当前时间戳

代码语言:javascript
复制
t6 = time.ctime()
print(t6)

strftime(format[, tt])

将时间元组以指定的格式转为字符串,如果没有tt参数默认使用当前本地时间元组

代码语言:javascript
复制
t7 = time.strftime(<span class="hljs-string">"%Y-%m-%d %H:%M:%S"</span>, t3)
print(t7)

strptime(st, format)

将指定格式的字符串解析为时间元组,是strftime的逆过程

注意:format表示的格式要与st一致

代码语言:javascript
复制
t8 = time.strptime(<span class="hljs-string">"2001-10-01 08:08:08"</span>, <span class="hljs-string">"%Y-%m-%d %H:%M:%S"</span>)
print(t8)

sleep()

延迟一个时间段,接收整型或者浮点型

代码语言:javascript
复制
time.sleep(<span class="hljs-number">2</span>)

clock()

返回当前程序执行时间,Unix系统始终返回全部运行时间,而Windows系统从第二次开始都是以第一次调用此函数的时间戳为基准,而不是以程序开始的时间为基准

代码语言:javascript
复制
<span class="hljs-comment">#                   windows   Unix</span>
print(time.clock()) <span class="hljs-comment"># 0         1</span>
time.sleep(<span class="hljs-number">1</span>)
print(time.clock()) <span class="hljs-comment"># 1         2</span>
time.sleep(<span class="hljs-number">1</span>)
print(time.clock()) <span class="hljs-comment"># 2         3</span>

二、datetime模块

  • 概述

datetime比time高级,可以理解为datetime基于time进行了封装,提供了更简单的函数接口,datetime模块的接口更直观、更容易调用

模块中的类

  • time 只关注时间
  • date 只关注日期
  • datetime 同时关注日期和时间
  • timedelta 主要用于计算时间跨度
  • tzinfo 时区相关

导入

代码语言:javascript
复制
import datetime

方法

获取当前时间

代码语言:javascript
复制
t1 = datetime.datetime.now()
print(t1, type(t1))

获取指定日期时间

代码语言:javascript
复制
t2 = datetime.datetime(2001, 10, 1, 8, 8, 8)
print(t2)

将datetime时间转对象为字符串

代码语言:javascript
复制
t3 = t1.strftime("%X %x")
print(t3, type(t3))

将字符串转为datetime对象

代码语言:javascript
复制
t4 = datetime.datetime.strptime(t3, "%X %x")
print(t4, type(t4))

时间相减,返回一个时间间隔

代码语言:javascript
复制
t5 = datetime.datetime(2001, 10, 1, 8, 8, 8)
t6 = datetime.datetime(2001, 10, 2, 9, 8, 9)
t7 = t6- t5
print(t7, type(t7))
#获取时间间隔天数
print(t7.days)
#获取去除间隔天数以外的间隔秒数
print(t7.seconds)

三、calendar模块

概述

日历模块

导入

代码语言:javascript
复制
import calendar

方法

返回指定年的某月

代码语言:javascript
复制
print(calendar.month(2019, 2))

返回指定年的日历

代码语言:javascript
复制
print(calendar.calendar(2018))

判断是否是闰年

代码语言:javascript
复制
print(calendar.isleap(<span class="hljs-number">2000</span>))

返回某个月的weekday的第一天和这个月的所有天数

代码语言:javascript
复制
print(calendar.monthrange(<span class="hljs-number">2019</span>, <span class="hljs-number">4</span>))

返回某一个月以一周为周期的元素序列

代码语言:javascript
复制
print(calendar.monthcalendar(<span class="hljs-number">2019</span>, <span class="hljs-number">2</span>))

四、uuid模块

概述

是128位的全局唯一标识符,通常由32字节的字母串表示,它可以保证时间和空间的唯一性,也称为GUID

作用

随机生成字符串,在token、账号、订单号等需要唯一标识的地方使用

原理

通过Mac地址、时间戳、命名空间、随机数、伪随机数来保证产生的id的唯一性

算法:

  • uuid1()基于时间戳 有MAC地址、当前时间戳、随机数字,可以保证全球范围内的唯一性。但是由于MAC地址的使用会带来安全问题,局域网中可以使用IP来代替MAC
  • uuid2()基于分布式计算环境DCE 算法和uuid1()相同,不同的是把时间戳的前4位换成POSI的UID,实际当中很少使用 注意:python中没有这个函数
  • uuid3()基于名字和MD5散列值 通过计算名和命名空间的MD5散列值得到,保证了同一命名空间中不同名字的唯一性,和不同命名空间的唯一性,但是同一命名空间的相同名字生成相同的uuid
  • uuid4()基于随机数 由伪随机数得到的,有一定的重复概率,这个重复概率是可以通过计算得到的
  • uuid5()基于名字和SHA1散列值 算法和uuid3()相同,不同的是使用SHA1算法

使用经验:

  • python中没有基于DCE的,所以uuid2()可以忽略
  • uuid4()存储概率性重复,由于无映射性所以最好不用
  • 如果在全局的分布式环境下,最好使用uuid1()
  • 若名字的唯一性要求,最好使用uuid3()或者uuid5()

导入

代码语言:javascript
复制
import uuid

使用

代码语言:javascript
复制
a = uuid.uuid1()
print(a, type(a))
b = str(a)
print(b, type(b))
# print(uuid.uuid2())
print(uuid.uuid3(uuid.NAMESPACE_DNS, "zutuanxue_com"))
print(uuid.uuid3(uuid.NAMESPACE_DNS, "zutuanxue_com"))
print(uuid.uuid3(uuid.NAMESPACE_OID, "zutuanxue_com"))
print(uuid.uuid3(uuid.NAMESPACE_DNS, "zutuanxue_com"))
print(uuid.uuid5(uuid.NAMESPACE_DNS, "zutuanxue_com"))

五、collections模块

概述

python中内建的一个集合模块,提供了许多有用的集合类

namedtuple

概述

命名元组,本质是一个函数,用他来创建一个自定义的tuple类型

规定tuple元素的格式,并可以用属性而不是索引引用tuple中的元素

用namedtuple实际上是创建一个新的数据类型

导入

代码语言:javascript
复制
from collections import namedtuple

使用

代码语言:javascript
复制
#假设这是一个点的坐标,但是没有写注释,时间久了就忘了该有含义
p = (1, 2)


# 定义一个新的数据类型,
Point = namedtuple("point", ["x", "y"])
# 定义一个Point类型的变量,保存一个元组数据
p2 = Point(1, 2)
print(p2, isinstance(p2, Point), isinstance(p2, tuple))
#访问命名元组元素的值
print(p2[0], p2[1])
print(p2.x, p2.y)

deque

概述

使用list存储数据,按索引访问元素,但是插入和删除元素会根据元素的个数增多个降低效率。因为list是线性存储,数据量大插入和删除的效率就会低。

deque就是为了高效实现插入和删除操作的双向列表,适用于队列和栈。并且deque是线程安全的

导入

代码语言:javascript
复制
from collections import deque

使用

代码语言:javascript
复制
q = deque([1,2,3,4,5])

q.append(6)
q.appendleft(0)

print(q.pop())
print(q.popleft())

print(q)

defaultdict

概述

使用dict时,如果引用的key不存在,如果使用的[]方式则会报KeyError异常,如果使用的get()方式则会得到None。 如果希望key不存在时也能得到一个默认的值就使用defaultdict

导入

代码语言:javascript
复制
from collections import defaultdict

使用

代码语言:javascript
复制
d1 = {"a": 1, "b": 2, "c": 3}
# print(d1["d"])
# print(d1.get("d"))


d2 = defaultdict(lambda :"键值对不存在")
d2["a"] = 1
d2["b"] = 2
print(d2["c"])
print(d2.get("c"))
print(d2, type(d2), isinstance(d2, dict))

OrderedDict

概述

使用dict是,key是无序的。对dict做迭代时无法保证key的顺序。如果需要key有顺序,就可以使用OrderDict

导入

代码语言:javascript
复制
from collections import OrderedDict

使用

代码语言:javascript
复制
d1 = {"a": 1, "b": 2, "c": 3}
for key in d1:
    print(key)
print("----------------------")



d2 = OrderedDict([("a", 1),("b", 2),("c", 3)])
print(d2)
print(d2["a"])
print(d2.get("b"))

Counter

概述

是一个简单的计数器,本质上是dict的一个子类

导入

代码语言:javascript
复制
from collections import Counter

使用

需求:计算集合中每个字符出现的次数

代码语言:javascript
复制
s = <span class="hljs-string">"zutuanxue_com is a good man"</span>
c = Counter()
print(c, type(c), isinstance(c, dict))
<span class="hljs-keyword">for</span> ch <span class="hljs-keyword">in</span> s:
    c[ch] = c[ch] + <span class="hljs-number">1</span>
print(c)
<span class="hljs-keyword">for</span> key <span class="hljs-keyword">in</span> c:
    print(key, c[key])

六、base64模块

概述

用记事本打开图片等文件,看到一坨乱码,因为二进制文件包含很多无法显示的内容。所以想让记事本能处理二进制数据,就需要将二进制字符串转换,base64是一种比较常见的二进制编码方式

作用

适用于小段内容的编码,比如数字证书签名、cookie、网页中传输的少量二进制数据

编码原理

一个包含64个字符的列表 [“A”, “B”, ……, “Z”, “a”, “b”, ……, “z”, “0”, “1”, ……, “9”, “+”, “/”] 对二进制数据进行处理,每是三个字节一组,一组就是3x8=24bit,划分为4组,每组正好6bit。得到4个数字作为索引,然后查表,获取相应的4个字符,就是编码后的字符串

注意

base64是一种通过查表的编码方法,不能用于加密,即使修改了字符对照表也不行

使用

b64encode

代码语言:javascript
复制
s1 = b"zutuanxue_com is a good man"
print(base64.b64encode(s1))
s2 = b'c3VuY2sgaXMgYSBnb29kIG1hbg=='
print(base64.b64decode(s2))

由于=字符也可能出现在base64编码中,但是=在url、cookie里会造成歧义,所以很多base64编码会把编码后的=去掉

代码语言:javascript
复制
s6 = b"abcd"
s7 = base64.b64encode(s6)
print(s7)
'''
'YWJjZA=='
'YWJjZA'
'''
s8 = b'YWJjZA=='
print(base64.b64decode(s8))

注意 由于标准base64编码后可能出现字符+或/,在URL中就不能直接作为参数

urlsafe_b64encode

提供urlsafe_b64encode编码,保证url的安全,将+和/替换为-和_,提供urlsafe_b64decode进行url安全解码

代码语言:javascript
复制
s3 = <span class="hljs-string">b"http://www.zutuanxue.com"</span>
print(base64.urlsafe_b64encode(s3))
s4 = <span class="hljs-string">b"aHR0cDovL3d3dy5zdW5jay53YW5n"</span>
print(base64.urlsafe_b64decode(s4))

s5 = <span class="hljs-string">b"zutuanxue_com is a good m~"</span>
print(base64.b64encode(s5))
print(base64.urlsafe_b64encode(s5))

七、hashlib模块

概述

该模块提供了常见的摘要算法,如MD5、SHA1

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

作用

用于加密

MD5 最常见的摘要算法,速度快,生成的结构是128位字节,通常用32位16进制字符串表示

使用

代码语言:javascript
复制
s1 = b"zutuanxue_com is a good man"
m1 = hashlib.md5()
m1.update(s1)
ret = m1.hexdigest()
print(ret)

#如果数据量比加大,可以分多次调用update,最终结果是一样的
m2 = hashlib.md5()
m2.update(b"zutuanxue_com is a")
m2.update(b" good man")
ret2 = m2.hexdigest()
print(ret2)

SHA1 调用SHA1与调用MD5完全一样,SHA1的结果是160字节,通常用40位16进制字符串表示

使用

代码语言:javascript
复制
s2 = b"zutuanxue_com is a good man"
sh1 = hashlib.sha1()
sh1.update(s2)
ret3 = sh1.hexdigest()
print(ret3)

注意:数据量大同md5使用相同

更安全的 SHA256 SHA512 越安全的算法不见越慢,而且摘要越长

应用: 任何允许用户登录的网站都会存储用户登录的用户名和密码(存储在数据库中),那么密码一般存储的是原密码的摘要值 zutuanxue_com-666666明文存储到数据库中,如果数据库泄露,所有用户信息就会暴露

正确的保存口令方式不是存储明文,而是存储口令的摘要,当用户登录时,首先计算用户输入的明文的摘要,和数据库中的对比,如果一致说明口令正确,否则一定错误

八、hmac模块

概述

实现了HMAC算法,是用一个key对数据进行“杂凑”后在进行的hash,是用hmac比hash算法更安全,不同的key会产生不同的hash值

导入

代码语言:javascript
复制
s = b"zutuanxue_com is a good man"
key = b"good"
h = hmac.new(key, s, digestmod="MD5")
ret = h.hexdigest()
print(ret)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、time模块
  • 二、datetime模块
  • 三、calendar模块
  • 四、uuid模块
  • 五、collections模块
  • 六、base64模块
  • 七、hashlib模块
  • 八、hmac模块
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档