day 17 time datetime random hashlib hmac typing requests re模块
01.time模块;提供了三种不同类型的时间(时间戳)。三种不同类型的时间可以互相转换
import time
time.time() # 获取当前时间节点
time.sleep(1) # 暂停一秒钟
-
时间戳
print(time.time()) # 打印当前距1970年1月1日08:00:00 按秒的时间啊偏移量
-
格式话时间
format_time = time.strftime('%Y-%m-%d %X') # 中间的 - 只是连接符 print(format_time, type(format_time)) 2019-09-28 20:33:01 <class 'str'> #打印结果
-
结构化时间
print(time.localtime(0)) # 打印基准时间 time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0) print(time.localtime()) # 打印当前时间 time.struct_time(tm_year=2019, tm_mon=9, tm_mday=28, tm_hour=20, tm_min=11, tm_sec=10, tm_wday=5, tm_yday=271, tm_isdst=0) # 分别为(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)
-
结构化时间啊转换为格式化时间
struct_time = time.localtime(3600*24*365) # 从1970年1月1日00:00:00开始增加 print(time.strftime('%Y-%m-%d %X',struct_time)) 1971-01-01 08:00:00
-
格式化时间转化为结构化时间
format_time = time.strftime('%Y-%m-%d %X') print(time.strptime(format_time)) time.struct_time(tm_year=2019, tm_mon=9, tm_mday=28, tm_hour=20, tm_min=49, tm_sec=17, tm_wday=5, tm_yday=271, tm_isdst=-1)
-
结构化时间转化为时间戳
sturct_time = time.localtime(3600*24*365) print(time.mktime(sturct_time))
-
时间戳转化为结构化时间
time_stamp = time.time() print(time.localtime(time_stamp))
02.datetime模块;时间的加减
import datetime
now = datetime.datetime.now() # 获取当前时间
print(now)
# 默认以天为单位
print(now + datetime.timedelta(3))
# 加3周
print(now + datetime.timedelta(weeks=3))
# 加3小时
print(now + datetime.timedelta(hours=3))
# 减3小时
print(now - datetime.timedelta(hours=3))
print(now + datetime.timedelta(hours=-3))
# 打印自己设置的时间
print(now.replace(year=1949, month=10, day=1, hour=10, minute=1, second=0, microsecond=0))
03.hashlib模块;对字符加密
import hashlib
# 叠加性
m = hashlib.md5()
m.update(b'say')
m.update(b'hello') # 981fe96ed23ad8b9554cfeea38cd334a
m.update(b'hash123456') # 6c78fe5d027cee9724ed0793cd4096e8
print(m.hexdigest()) # 对于不同的字符而言,用不重复
# 981fe96ed23ad8b9554cfeea38cd334a
# 手机号/生日/性别/qq账号/以前的密码/ --》 挖矿(算法)
# 1 2 3 5 71113 111111111111111 - 1111111111111111111111 111111111111111111111111111111111111111111111111111
hash_pwd = '0562b36c3c5a3925dbe3c4d32a4f2ba2'
pwd_list = [
'hash3714',
'hash1313',
'hash94139413',
'hash123456',
'123456hash',
'h123ash',
]
for pwd in pwd_list:
m = hashlib.md5()
m.update(pwd.encode('utf8'))
res = m.hexdigest()
if res == hash_pwd:
print(f'获取密码成功:{pwd}')
05.hmac模块;加密钥
import hmac
m = hmac.new(b'maerzi')
m.update(b'hash123456') # f82317e44545b0ab087109454814b5c4
print(m.hexdigest())
m = hmac.new(b'sdfjhjk2394879ul%$$Y#($&')
m.update(b'hash123456') # 2a70fd0f13cb49357f40d326a4e071a2
print(m.hexdigest())
pwd_list = [
'hash3714',
'hash1313',
'hash94139413',
'hash123456',
'123456hash',
'h123ash',
]
06.typing模块;与函数连用,控制函数参数的数据类型,提供了基础数据类型之外的数据类型
lt = [1, 2, 3, 4]
print(type(lt) is list)
from typing import Iterable, Iterator, Generator
def func(x: int, lt: Iterable) -> list: # 规定型参接受的数据类型,返回值的类型
return [1, 2, 3]
func(10, '123123')
typing常用数据类型
- int、long、float: 整型、长整形、浮点型
- bool、str: 布尔型、字符串类型
- List、 Tuple、 Dict、 Set:列表、元组、字典、集合
- Iterable、Iterator:可迭代类型、迭代器类型
- Generator:生成器类型
07.requests模块;模拟浏览器发送请求
import re
import requests
response = requests.get('https://ishuo.cn') # 得到这个网页内的内容
data = response.text
res = re.findall('<div class="content">(.*?)</div>|</span><a href="/subject/.*?">(.*?)</a>', data) # 通过正则匹配得到想要的内容
with open('duanzi_new.txt', 'w', encoding='utf8') as fw:
for i in res: # type:str
print(i)
if i[1]:
fw.write(i[1] + ':' + '
')
if i[0]:
if i[0].startswith('<ul>'):
continue
fw.write(i[0] + '
')
08.re模块 通过正则匹配获取需要的内容
import re
s='com.con.cn.cm.china'
print(re.findall('((w+.){2})',s))
# .*?
#贪婪和非贪婪 .*?;匹配所有内容, (.*?);获取内容
#findall 获取想要的内容
#re.S
#match 从开头找一个,找得到就不找了 ;找不到报错 --》必须是以该内容开头的字符串才能找到
s = 'ab abcddd abc'
res = re.match('abcd*', s)
print(res.group())
#sarch 从字符串中找一个
s = 'ab abcddd abc'
res = re.search('abcd*', s)
print(res.group())
#分组 --> 只要括号里的(*****)
s = 'abc abcd abcdd'
print(re.findall('a(.)c(d)', s))
# 有名分组(了解)
s = 'abc abcd abcdd'
print(re.search('a(?P<name>.)c(?P<name2>d)', s).groupdict())