一、time模块
-
时间戳(time)
定义:时间戳表示从1970年1月1日00:00:00开始按秒计算的偏移量
time_stamp = time.time() print(time_stamp, type(time_stamp)) 输出: 1569652399.4683974 <class 'float'>
-
格式化时间(strftime)
定义:普通的字符串格式的时间
format_time = time.strftime("%Y-%m-%d %X") print(format_time, type(format_time)) 输出: 2019-09-28 14:35:51 <class 'str'>
-
结构化时间(localtime)
定义:元组共有9个元素共九个元素,分别为(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)
print(time.localtime()) 输出: time.struct_time(tm_year=2019, tm_mon=9, tm_mday=28, tm_hour=14, tm_min=40, tm_sec=12, tm_wday=5, tm_yday=271, tm_isdst=0)
二、datetime模块
-
返回当前时间(datetime.now)
print(datetime.datetime.now()) 输出 2019-09-28 14:44:15.995998
-
进行时间加减(timedelta)
print(datetime.datetime.now() + datetime.timedelta(3)) 输出 2019-10-01 19:19:50.101597
三、random模块
-
大于0且小于1的随机小数(random)
print(random.random()) 输出 0.42866657593385415
-
大于等于1且小于等于3之间的随机整数(randint)
print(random.randint(1, 3)) 输出 3
-
大于等于1且小于3之间的整数(randrange)
print(random.randrange(1, 3)) 输出 2
-
列表内的任意一个元素(choice)
print(random.choice([1, '23', [4, 5]])) 输出 [4, 5]
-
打乱列表的顺序(shuffle)
lis = [1, 3, 5, 7, 9] random.shuffle(lis) print(lis) 输出 [9, 1, 5, 7, 3]
-
列表元素任意n个元素的组合(sample)
l = [1, 2, 3, 4, 6, 12] print(random.sample(l,3)) 输出 [2, 1, 3]
-
大于1小于3的小数(uniform)
print(random.uniform(1, 3)) 输出 2.4500257036462445
四、hashlib和hmac模块
-
hashlib模块的特点
-
传入的内容一样,得到的hash值一样,可用于非明文密码传输时密码校验。
-
不能由hash值反解成内容,即可以保证非明文密码的安全性。
-
只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的,可以用于对文本的哈希处理。
-
hash模块加密
import hashlib m = '123' cipher = hashlib.md5() cipher.update(m.encode('utf-8')) print(cipher.hexdigest()) 输出 202cb962ac59075b964b07152d234b70
-
hmac模块特点
-
hmac.new括号内指定的初始key一样
-
无论update多少次,校验的内容累加到一起是一样的内容
4. hmac模块加密
import hmac m = '123' cipher = hmac.new('jiami'.encode('utf-8')) cipher.update(m.encode('utf-8')) print(cipher.hexdigest()) 输出 997d94bd89501257b0bbebf651c806b4
五、typing模块
-
typing模块的作用
-
类型检查,防止运行时出现参数和返回值类型不符合
-
作为开发文档附加说明,方便使用者调用时传入和返回参数类型
-
该模块加入后不影响程序的运行,不会报正式的错误,只有提醒。
-
typing模块的使用
from typing import List, Tuple, Dict def add(a: int, string: str, f: float,b: bool) -> Tuple[List, Tuple, Dict, bool]: list1 = list(range(a)) tup = (string, string, string) d = {"a": f} bl = b return list1, tup, d, bl print(add(5, "hhhh", 2.3, False)) 输出 ([0, 1, 2, 3, 4], ('hhhh', 'hhhh', 'hhhh'), {'a': 2.3}, False)
六、re模块
-
正则表达式
-
字符
元字符 | 匹配内容 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\W | 匹配非字母或数字或下划线 |
\S | 匹配非空白符 |
\D | 匹配非数字 |
\n | 匹配一个换行符 |
\t | 匹配一个制表符 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结尾 |
a|b | 匹配字符a或字符b |
() | 匹配括号内的表达式,也表示一个组 |
[…] | 匹配字符组中的字符 |
… | 匹配除了字符组中字符的所有字符 |
-
- 量词
量词 | 用法说明 |
---|---|
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n次到m次 |
2. 贪婪匹配与非贪婪匹配
-
贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配。
-
加上?为贪婪匹配模式转为非贪婪匹配模式,会匹配尽量短的字符串。
3. re模块下的常用方法
-
findall:返回所有满足匹配条件的结果,放在列表里
res = re.findall('a', 'eva egon yuan') print(res) 输出 ['a','a']
-
-
search:找到第一个匹配,然后返回一个包含匹配信息的对象
-
ret = re.search('a', 'eva egon yuan').group() print(ret) 输出 a
-
-
match:在对象开始处匹配,返回包含匹配信息的对象
-
ret = re.match('a', 'abc').group()print(ret) 结果 : a
-
-
split:先按‘a’分割得到‘ ’和‘bcd’,再对‘ ’和‘bcd’分别按照‘b’分割
-
ret = re.split('[ab]', 'abcd') print(ret) 输出 ['', '', 'cd']
-
-
sub:将数字替换成‘ ’,参数3表示替换3个
-
ret = re.sub('\d', ' ', 'yuan1hua2huo3', 3) print(ret) 输出 yuan hua huo