本篇介绍Python中的常用模块。
常用模块的介绍:
- time,datetime
- os,sys
- hashlib,json,pickle,collections
time
封装了获取时间戳和字符串形式的时间的一些方法。
time模块的三大对象
时间戳
时间戳:从时间元年开始的秒数(1970 1 1 00:00:00)(python中获取的秒数,java是毫秒)
1 | print(time.time()) |
结构化时间对象
- 结构化时间对象(class time.struct_time):像一个元组,拥有9个属性字段,可以单独使用其中的属性(index/attribute name)
- 它就像一个中介,供不同地区的计算机相互使用。
1 | obj = time.gmtime() |
time.gmtime() 与 time.localtime() 类似,作用是格式化时间戳为本地的时间。
如果sec参数未输入,则以当前时间为转换标准。 DST (Daylight Savings Time) flag (-1, 0 or 1) 是否是夏令时。也就是说,如果没有参数,它们的结果是相同的。
note:月和日期是从1开始的,小时,分钟,秒,星期都是从0开始的
时间字符串
- 1和2利于在不同的时区之间进行传播(即:国际化),但是不利于阅读。
- 字符串便于阅读.但是不利于国际化.
time三大对象之间的转换
- 时间戳 —> 格式化时间对象 :time.gmtime localtime() mktime()
- 格式化时间对象 —> 时间字符串: time.strftime(format,时间对象)
- 时间字符串 —> 格式化时间对象:time.strptime(str,format)
1 | # 时间对象 ---> 时间戳 |
日期格式化符号
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
datetime
同time模块相比,它的主要功能在于对属性值的抽取和计算上。
模块中的四大类
- date:日期,包含year,month,day三个属性
- time:时间,包含hour,minute,second,microsecond,tzinfo属性
- datetime:前两者的混合体
- timedelta:时间增量
1 | import datetime |
note:time不能参与运算
1 | o = datetime.time(21,20,5) |
练习:
1 | 练习2:计算三天前的日期 |
os
sys
hashlib
该模块封装一些用于加密的类。
包含很多的加密算法:MD5,sha1,sha256,sha512
用途
- 密码加密,不能以明文的形式存储密码,密文的形式。
- 文件的校验
特点
将bytes类型字节转化成固定长度数字组成的字符串。
把一个大的数据切分成不同的小块,分别对不同的块进行加密,在汇总的结果,和直接对整体数据加密的结果一致。
单向加密,不可逆。
原始数据的一点小的变化,将导致结果的非常大的差异,“雪崩”效应。
步骤
获取一个加密对象
m = hashlib.md5()
使用对象的update,进行加密
m.update(b'abc')
通过hexdigest获取加密结果
ret = m.hexdigest()
note:其中1,2也可以合在一起写为:
m = hashlib.md5(b'abc')
加盐
为什么要加盐?
如果一个用户的用户名 abc 密码 123,另一个用户的用户名 ab 密码 c123 这样容易撞在一起,所以加盐。另外也是为了增加破解的难度。
让结果更复杂一些
1 | 在基础上加密后,在加密一次 |
动态的盐
1 | 加的盐要不断变化 |
sha系列 金融类,安全类,用这个级别。
- 随着sha系列数字越高,加密越复杂,越不易破解,但耗时越长。
文件的校验
linux中一切皆文件:文本,非文本文件,音频,视频,图片…
无论下载的视频,还是软件(国外的软件),往往都会有一个md5值。
版本一:
1 | file = 'pycharm-professional-2019.1.2.exe' |
版本二: read(1024) 没有行的区分。
1 | #read(1024) 表示最大读1024个字节。 |
json
pickle
collections模块
给我们提供一些python的数据类型,比较特殊的数据类型。
namedtuple:命名元组
deque:双端队列
类似于列表的一种容器型数据,高效实现插入和删除操作。
Counter:计数器
主要用来计数
OrderedDict:有序字典
(3.6后面的版本很少用了)
defaultdict:带有默认值的字典
因为可以设置值的默认值,所以,相对于字典可以少一部初始化。
例子:
1 | l = [11,22,33,44,55,66,77,88] |
functools
wraps
- 用于保留函数的元信息,详见 Python 函数
partial
- partial可以生成一个固定了参数的新函数
1 | import functools |