上节课回顾
os模块
与操作系统交互
sys模块
与python解释器交互
json模块
跨平台数据交互,json串
pickle模块
存储python所有类型的数据,为了python文件和python文件的交互
logging模块
日志记录
今日所学
包
- 包 == 模块,包也是拿来导入用的
- 包是含有
__init__.py
的文件夹;导包就是导入__init__
- 包一定是被当做模块文件导入,模块文件m1.py/m2.py的搜索路径以执行文件的路径为准
time模块
提供了三种不同类型的时间(最主要为时间戳),三种不同类型的时间可以互相转换
# 时间戳形式
print(time.time())
# 格式化时间
print(time.strftime('%Y-%m-%d %X'))
# 结构化时间
print(time.localtime())
time.sleep() 让程序睡觉几秒
datetime模块
时间的加减
import datetime
now = datetime.datetime.now()
print(now)
# 默认3天
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))
random模块
随机数
random.random()
0-1的数
random.randint(1,3)
1-3的整数
lt=[1,2,3]
random.shuffle(lt)# 打乱列表
random.choice(lt)# 随机选择一个
random.seed()
只随机一次
hashlib模块和hmac模块
hashlib模块
加密
m = hashlib.md5()
m.update(b'hello')
m.update(b'hello')
print(m.hexdigest())
m = hashlib.md5()
m.update(b'hellohello')
print(m.hexdigest())
- 结果永远都是相同长度的字符串
- 叠加性
hmac模块
加密, 加盐处理
m = hmac.new(b'123')
m.update(b'hellow')
print(m.hexdigest())
typing模块
与函数联用,控制函数参数的数据类型,提供了基础数据类型之外的数据类型
requests模块
一般用于爬虫,用来爬取数据,模拟浏览器对url发送请求拿到数据
#用法
import requests
res=requests.get(url)
data=res.text
print(data)
re模块
去字符串找符合某种特点的字符串
#查找所有
findall
# ^:以...开头
res = re.findall('^ab', s)
print(res)
res = re.findall('^bc', s)
print(res)
# $: 以..结尾
s = 'abcdabc'
res = re.findall('bc$', s)
print(res)
# .: 任意字符
s = 'abc红abc'
res = re.findall('abc.', s)
print(res)
# d: 数字
s = 'skld2342ljk'
res = re.findall('d', s)
print(res)
# w: 非空,数字字母下划线
s = 'skld_23 42ljk'
res = re.findall('w', s)
print(res)
# s:空,空格/ /
s = 'skld_23 42ljk'
res = re.findall('s', s)
print(res)
# D: 非数字
s = 'skld2342ljk'
res = re.findall('D', s)
print(res)
# W: 空
s = 'skld_23 42ljk'
res = re.findall('W', s)
print(res)
# S:非空
s = 'skld_23 42ljk'
res = re.findall('S', s)
print(res)
# +: 前面的一个字符至少1个
s = 'abcddddd abcd abc'
print(re.findall('abcd+', s))
# ?:前面的一个字符0-1个
s = 'abcddddd abcd abc'
print(re.findall('abcd?', s))
# *:前面的一个字符至少0个
s = 'abcdddddddddddddddddd abcd abc'
print(re.findall('abcd*', s))
# []: 中括号内的都可以
s = 'abc bbc cbc dbc'
print(re.findall('[abc]bc', s))
# [^]: 中括号的都不可以
s = 'abc bbc cbc dbc'
print(re.findall('[^abc]bc', s))
# |:或
s = 'abc bbc dbc'
print(re.findall('abc|bbc', s))
# {2}:前面的字符2个
s = 'abccabc abccc'
print(re.findall('abc{2}', s))
# {1,2}:前面的字符2个
s = 'abccabc abccc'
print(re.findall('abc{1,2}', s))
# 贪婪模式
总是尝试匹配尽可能多的字符
# .(任意字符)*(0-无穷个)
s = 'abcdefgbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbg'
print(re.findall('a.*g', s))
# 非贪婪模式(*******)
总是尝试匹配尽可能少的字符
# .(任意字符)*(0-无穷个)?(让他进入非贪婪模式)
s = 'abcdefgbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbg'
print(re.findall('a.*?g', s))
# 匹配邮箱:
s = '#@#@#@nickchen121@163.com$$$$////nick@qq.com$$#$#$[]]2287273393@162.com@$2423423lksdlfj#'
# w(字母/数字/下划线)+(0-无穷个)@ w(字母/数字/下划线)+(0-无穷个).com
print(re.findall('w+@w+.com', s))
## match: 从开头找一个,找得到就不找了 ;找不到报错 --》
s = 'ab abcddd abc'
res = re.match('abcd*', s)
print(res.group())
## search: 从字符串找一个,就不找了
s = 'ab abcddd abc'
res = re.search('abcd*', s)
print(res.group())
## split 拼接
s = 'ab23423abcddd234234abcasdfjlasjdk234l23lk4j2kl34kl25k3j2kl3j5lkj'
print(re.split('d+', s))
## sub == replace 替换
s = 'ab23423abcddd234234abcasdfjlasjdk234l23lk4j2kl34kl25k3j2kl3j5lkj'
print(re.sub('d+', ' ', s))
## subn --> 替换了多少次
s = 'ab23423abcddd234234abcasdfjlasjdk234l23lk4j2kl34kl25k3j2kl3j5lkj'
print(re.subn('d+', ' ', s))
## 修饰符 --> re.S会让.匹配换行符(*****)
s = '''abc
abcabc*abc
'''
# .不匹配换行
print(re.findall('abc.abc', s)) # ['abc*abc']
print(re.findall('abc.abc', s, re.S)) # ['abc
abc', 'abc*abc']
#
## 分组 --> 只要括号里的(*****)
s = 'abc abcd abcdd'
print(re.findall('a(.)c(d)', s))#[('b', 'd'), ('b', 'd')]
## 有名分组(了解)
s = 'abc abcd abcdd'
print(re.search('a(?P<name>.)c(?P<name2>d)', s).groupdict())