包
包是拿来导入的,也属于模块.
包含有__init__
.py的文件;导包就是导入__init__
.py文件
包一定是被当做模块文件导入,模块的搜索路径以执行文件路径为准.
包的作用
当模块内部函数过多,为了方便管理模块,把一个模块划分成多个模块,但是又不能改变导入方式,就把模块放入一个包内.
time模块
提供了三种不同类型的时间,三种不同类型时间可以转换
time.time()
时间戳
time.sleep(1)
睡眠1秒
datetime模块
可以进行时间的加减
now = datetimr.datetime.now() ##计算机当前时间
print(now + datetime.timedelta(3)) ##默认加三天
print(now + datetime.timedelta(weeks=3)) ##加三周
print(now + datetime.timedelta(hours=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)) ##1949-10-01 10:01:00 00(年月日 时分秒 毫秒)
random模块
产生随机数
掌握
print(random.random()) ##默认0-1的随机数不包括0和1
print(random.random(1,3)) ##随机生成1-3的整数
lt = [1,2,3]
random.shuffle(lt)
print(lt) ##对lt进行乱序
print(random.choice(lt)) ##lt中随机选一个数
了解
print(random.sample([1,'a','b',2,3],n))
##随机选列表中的n个数据
hashlib模块和hmac模块
hashlib是对字符加密
hmac是对字符加密,并加上密钥
typing模块
与函数连用,控制函数的参数的数据类型,提供了基础数据类型外的数据类型
requests模块
模拟浏览器对url发送请求,拿到数据
url:是一个特定的网址,永不重复
re模块
去字符串,找符合某种特点的字符串
元字符
^
以..开头
s = 'abcdab'
res = re.findall('^ab',s)
print(res) ##['ab']找到第一个就不找了
res = re.findall('^bc',s)
print(res) ##[]开头对不上就返回空
$
以..结尾
s = 'abcdaba'
res = re.findall('ba$',s)
print(res) ##['ba']符合就返回,不符合就返回空
\d
数字
s = 'abc123abc123'
res = re.findall('\d',s)
print(res) ##['1','2','3','1','2','3']只返回数字
\w
返回非空,数字,字母,下划线等
s = 'abc 233 dgv 11'
res = re.findall('\w',s)
print(res) ##['a','b',...,'1']除了空格,空等都以单个字符返回
\s
返回空格,\t,\n
s = """abc 233
dgv 11"""
res = re.findall('\s',s)
print(res) ##[' ','\n',' ']返回空格,\t,\n
\D
非数字
s = 'abc123abc1_3'
res = re.findall('\D',s)
print(res) ##['a','b',...,'_']返回除数字的字符
+
前面的一个字符至少一个
s = 'abcddd abcd abc'
res = re.findall('abcd+',s)
print(res) ##['abcddd','abcd']
?
前面的字符0-1个
s = 'abcddd abcd abc'
res = re.findall('abcd?',s)
print(res) ##['abcd','abcd','abc']
*
前面的一个字符至少0个
s = 'abcddd abcd abc bc'
res = re.findall('abcd*',s)
print(res) ##['abcddd','abcd','abc']
.
任意字符
s = 'abc12bca'
res = re.findall('abc.',s)
print(res) ##['abc1']符合.就返回所占位的字符,无或不符合就返回空
.* 贪婪模式
.(任意字符)*(0-无穷个)
s = 'abcdefgbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbgggg'
res = re.findall('a.*g',s)
print(res) ##['abcdefgbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbgggg']
.?非贪婪模式
.(任意字符)(0-无穷个)?(让其进入非贪婪模式)
s = 'abcdefgbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbgggg'
res = re.findall('a.*?g',s)
print(res) ##['abcdefg']
re.S(*****)
会让.匹配换行符
match
从头开始找,找到就不找了,找不到就报错
s = 'ab abcddd abc'
res = re.search('abcd*', s)
print(res.group()) ##报错
search
整个字符中找,找到就不找了,找不到就报错
s = 'ab abcddd abc'
res = re.search('abcd*', s)
print(res.group()) ##abcddd
分组
只要括号里的
s = 'abc abcd abcdd'
res = re.findall('a(.)c(d)',s)
print(res) ##[('b','d'),('b','d')]
有名分组
只要括号里的,以字典形式
s = 'abc abcd abcdd'
res = re.search('a(?P<name>.)c(?P<name2>d)', s)
print(res.group()) ##{'name':'b','name2':'d'}