上节课回顾
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:空,空格/\t/\n 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\nabc', '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())