Python 博客整理 day17
包
包本质上就是模块,可以和模块一样,用import导入
包是含有__init__.py
的文件;导包就是导入__inti__
包一定是被当做模块文件导入,模块文件 的搜索路径以执行文件 的路径为准
模块和包
导入模块发生的三件事:
1. 创建一个包的名称空间
2. 执行py文件,将执行过程中产生的名字存放于名称空间中
3. 在当前执行文件中拿到一个名字 , 该名字是指向内包的名称空间的
导入包发生的三件事:
1. 创建一个包的名称空间
2. 由于包是一个文件夹,无法执行包,因此执行包下的 `.py` 文件,将执行过程中产生的名字存放于包名称空间中(即包名称空间中存放的名字都是来自于`.py`)
3. 在当前执行文件中拿到一个名字 , 该名字是指向包的名称空间的
绝对导入和相对导入
绝对导入:
用上一级包名导入
相对导入;
.
代表当前被导入文件所在的文件夹
..
代表当前被导入文件所在的文件夹的上一级
...
代表当前被导入文件所在的文件夹的上一级的上一级
time模块
#time 模块:提供了三种不同类型的时间(时间戳),三种不同类型的时间可以互相转换
import time
print(time.time())#时间戳形式
#格式化时间
print(time.strftime('%Y-%m-%d %X'))
#结构化时间
print(time.localtime())
#结构化时间 --> 格式化时间
struct_time = time.localtime(3600*24*365)
print(time.strftime('%Y-%m-%d %X',struct_time))
#格式化时间-->结构化时间
format_time = time.strftime('%Y-%m-%d %X')
print(time.strptime(format_time,'%Y-%m-%d %X'))
#结构化时间 --> 时间戳
struct_time = time.localtime(3600*24*365)
print(time.mktime(stryct_time))
#时间戳 --> 结构化时间
time_stamp = time.time()
print(time.localtime(time_stamp))
time.time.sleep()
datetime模块
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.replace(year = 1949,month = 10, hour = 10,minute = 1,secend = 0))
random模块
random模块:随机数
#随机生成0-1
print(radom.random())
#随机生成 1- 3整数
print(random.randint(1,3))
#打乱顺序
lt= [1,2,3]
random.shuffle(lt)
print(lt)
#随机选择一个 --> 梅森旋转算法
random.seed(time.time())
print(random.random())
#做了解 --> 从列表中随机选两个
print(random.sample([1,'a','c',2,3,4],2))
hashlib模块/hmac模块
hashlib模块:对字符加密
#叠加性
import hashlib
m = hashlib.md5()
m.update(b'say')
m.update(b'hello')
print(m.hexdigest())
hmac模块: 对字符加密,并且加上密钥
#hamc 密钥(加盐)
import hamc
m = hmac.new(b'')
m.updateb(b'password')
print(m.hexdigest())
typing模块
typing模块:与函数连用,控制函数参数的数据类型,提供了基础数据类型之外的数据类型
lt = [1, 2, 3, 4]
print(type(lt) is list)
from tpying import Iterable
def func(x:int ,lt: Iterable) -> list:
return [1,2,3
func(10, '123123')
requests模块
requests模块:模拟浏览器,向网站发送请求
import requests
response = requests.get('http://www.baidu.com')
data = response.text
with open('test.txt','w',encoding='utf8') as fw:
fw.write(data)
re模块
re模块:去字符串找符合某种特点的字符串
import re
s = 'abcdabc'
#^ :以...开头
res = re.findall('^ab',s)
#$ :以...结尾
res = re.findall('bc$',s)
# . :任意字符
res = re.findall('abc',s)
# d :数字
res = re.findall('d',s)
# w :非空,数字字母下划线
res = re.findall('w',s)
# s :空,空格
res = re.findall('s',s)
# D:非数字
res = re.findall('D',s)
# W:空
res = re.findall('W',s)
#S :非空
res = re.findall('S',s)
# + :前面的一个字符至少一个
print(re.findall('abc+',s))
# ? :寻找到?前面的一个字符 0-1 个
print(re.findall('abcdd?', s))
# * :前面的一个字符至少0个
print(re.findall('abcd*',s))
# [] :中括号内的都可以
print(re.findall('[abc]bc',s))
# [^] :中括号内的都不可以
print(re.findall('[^abc]bc',s))
# | : 或
print(re.findall('abc|bbc',s))
# {2}:前面的字符 2个
print(re,findall('abc{2}',s))
# {1,2} :前面的字符 2 个
print(re,findall('abc{1,2}',s))
#贪婪模式
# .(任意字符) * (0-无穷个)
print(re.findall('a.*g',s))
#非贪婪模式
# . (任意字符) * (0-无穷个)
print(re,findall('a.*?g',s))
#bug # . (任意字符) * (0-无穷个)
print(re.findall('.*?',s))