'''在真正做项目时,我们会使用别人已经开发好的模块,这样就不必从零开发项目了,还可以加快开发速度。
这些模块可能是Python官方提供的,也可能是第三方开发的。
Python官方开发的就叫做内置模块'''
print('------------数学计算模块--------------------')
print('在math模块中包含数学运算相关模块,例如指数、对数、平方根和三角函数等')
'''
函数 说明
ceil(x) 返回大于或等于x的最小整数
floor(x) 返回小于或等于x的最大整数
sqrt(x) 返回x的平方根
pow(x,y) 返回x的y次幂的值
math.log(x[,base]) 返回以x为底的x对数,若省略底数base,则计算x自然对数
sin(x) 返回弧度x的三角正弦
degrees(x) 将弧度x转换为角度
radians(x) 将角度x转换为弧度
'''
import math
print(math.ceil(2.3)) #3
print(math.ceil(-2.3)) #-2 #返回大于或等于x的最大整数
print(math.floor(2.3)) #2
print(math.floor(-2.3)) #-3#返回小于或等于x的最大正是朱
print(math.sqrt(9)) #3.0
print(math.pow(10,2)) #100 #10的2次方
print(math.log(125,5)) #3.0000000000000004
print(math.degrees(0.3*math.pi)) #54.0 #将弧度转换为角度
print(math.radians(360/math.pi)) #2.0 #将角度转换为弧度
print(math.sin(0.3) ) #0.29552020666133955
#日期时间模块datetime
'''Python官方提供的日期时间模块主要是datetime模块
datetime:包含日期和时间
date:只包含日期
time: 只包含时间
timedelta:计算时间跨度
tzinfo:时区信息
'''
print('-----------datetime类--------------')
'''datetime类表示日期和时间等信息,我们可以使用如下构造方法创建datetime对象:
datetime.datetime(year,month,day,hour=0,second=0,microsecond=0,tzinfo=none)
参数 说明 取值范围
year 年(不可以忽略) datetime.MINYEAR< year<datetime.MAXYEAR
month 月(不可以忽略) 1-12 (超出取值范围会报ValueError)
day 日(不可以忽略) 1-day-给定年份和月份,这时该月的最大天数
hour 小时(可以忽略) 0-23
minute 分钟(可以忽略) 0-59
second 秒(可以忽略) 0-59
microsecond 微秒(可以忽略) 0-1000000(一百万)
tzinfo 时区 无
'''
import datetime
d=datetime.datetime(2022,2,22,23,56,56,100)
print(d) #2022-02-22 23:56:56.000100
'''datetime类的常用方法如下:
datetime.today(): 返回当前的本地日期和时间
datetime.now(tz=None):返回指定时区的当前日期和时间,参数tz用于设置时区,如果tz参数为None或被省略,则等同于today()。
datetime.fromtimestamp(timestamp,tz=None):返回与UNIX时间戳对应的本地日期和时间。
UNIX时间戳是从1970年1月1日00:00:00开始到现在为止的总秒数
'''
td=datetime.datetime.today()
print(td) #当前日期和时间:2022-06-02 23:07:13.772148
now=datetime.datetime.now()
print(now) #2022-06-02 23:08:25.927039
print('''------------date类---------------''')
'''
date类表示日期信息,我们可以用如下方法创建date对象
datetime.date(year,month,day)
date类的常用方法:
date.today:返回当前的本地日期
date.fromtimestamp(timestamp):返回与UNIX时间戳对应的本地日期
'''
d=datetime.date(2022,2,22)
print(d) #2022-02-22
d2=datetime.date.today()
print(d2) #2022-06-03(今日)
d3=datetime.date.fromtimestamp(9999999.999)
print(d3) #1970-04-26
print('--------------time类-----------------------')
'''time类表示一天中的时间信息,我们可以用如下方法构造time对象:
datetime.time=(hour=0,minute=0,second=0,microsecond=0,tzinfo=None)
这些参数的含义和取值范围和datetime类一样
'''
dt=datetime.time(21,22,23,1923)
print(dt) #21:22:23.001923
print('------------计算时间跨度类timedelta-----------------')
'''timedelta类用于计算datetime、date、和time对象的时间间隔
timedelta类的构造方法如下:
datetime.timedelta(days=0,seconds=0,microseconds=0,milliseconds=0,minutes=0,hours=0,weeks=0)
其中所有的参数都可以作为整数或浮点数,也可以为正数或负数
参数 说明
day 天
second 秒
microsecond 微秒
milliseconds 毫秒
minute 分钟
hour 小时
weeks 周
'''
d=datetime.date.today() #获取当前的本地日期
delta=datetime.timedelta(10) #创建10天后的timedelta对象
d+=delta #当前日期+10天
print(d) #2022-06-13(10天后的日子)
d=datetime.date(2022,2,22)
delta=datetime.timedelta(weeks=3) #创建5周后的timedelta对象
d-=delta #指定日期减去指定时间间隔
print(d) #2022-02-01 #指定日期往前推3个星期
#timedelta的参数可以是负数
d3=datetime.date(2022,2,22)
delta3=datetime.timedelta(weeks=-3)
d3+=delta3
print(d3) #22022-02-01 #由于timedelta的参数是负数,那么就会日期就会往前推3个星期
print('-------------将日期时间与字符串相互转换-------------------')
'''将日期时间对象转换为字符串,称之为“日期时间格式化”
在Python中使用strftime()方法进行日期时间的格式化,在datetime、date以及time这3个类中都有一个实例方法strftime(format)。
将字符串转换为日期时间对象,叫做“日期时间解析”
在Python中使用datetime.strptime(date_string,format)类方法进行日期时间解析
在strftime()和strtptime()方法中都有一个格式化参数format,用来控制日期时间的格式,常用的日期和时间格式控制符如下所示
指令 含义 示例
%m 两位月份表示 01、02、12
%m 两位年份表示 09、19
%y 4位年份表示 2019、1998
%d 两位表示月中的一天 01、02、03
%H 两位小时表示(24小时制) 00、01、23
%I 两位小时表示(12小时制) 01、
%p AM或PM区域性设置 AM、PM
%M 两位分钟表示 01、59
%S 两位秒表示 00、59
%f 以6位数表示微秒 000000、000123、999999
%z +HHMM或-HHMM形式的UTC偏移 +000、-400、+1030,如果没有设置时区则为空
%Z 时区名称 UTC、EST、CST,如果没有设置时区则为空
'''
d=datetime.datetime.today()
#设置日期时间格式化,表示4位年、2位月、2位天、2为小时(24小时制)、2位分以及2位秒
print(d.strftime('%Y-%m-%d %H:%M:%S')) #2022-06-03 19:52:43
'''
如果一行代码是d.strftime('%Y-%m-%d %H:%M:%S')
然后print(d),好像没有效果?
'''
d2=datetime.datetime.today()
print(d2.strftime('%Y-%m-%d')) #2022-06-03
str_date='2022-02-22 22:22:22'
date=datetime.datetime.strptime(str_date,'%Y-%m-%d %H:%M:%S') #将一个字符串按照指定的格式解析为日期时间对象
print(date) #2022-02-22 22:22:22
'''在将一个字符串解析为日期时间对象时,需要注意:提供的字符串应该可以表示一个有效的日期时间字符串,否则就会发生ValueError异常'''
print('--------------------正则表达式模块re-------------------------')
'''正则表达式指的是预先定义好一个“字符串模板”,通过这个字符串模板可以匹配、查找和替换哪些匹配字符串模板的字符串'''
'''正则表达式实现的字符串操作效率更高功能更强,但难点是编写字符串模板,即正则表达式,
几乎所有编程语言的正则表达式都是通用的,Python中的正则表达式模块是re'''
print('------------字符串匹配--------------------------')
'''字符串匹配指验证一个字符串是否符合指定的“字符串模板”,常用于用户输入验证。
例如,用户在注册时需要输入邮箱,所以需要验证邮箱是否有效,这就要用到字符串匹配验证
可以用match(p,text)函数进行字符串匹配,其中的参数与p是正则表达式,即字符串模板,text是要验证的字符串。
如果匹配成功,则返回一个Match对象(匹配对象),否则返回None。
'''
import re
p=r'\w+@lingjie\.li' #验证邮箱的正则表达式
#w是words,w+是匹配包含下划线内“_”的任何字母数字字符,相当于数据集【a-zA-Z0-9】
email='u@lingjie.li' #要验证的邮箱字符串
m=re.match(p,email) #返回非空的match对象说明匹配成功
print(type(m)) #<class 're.Match'>
print('--------------字符串查找------------------------------------')
'''字符串查找指从一个字符串中查找匹配正则表达式的子字符串,常用于数据分析、网络爬虫等数据处理中'''
'''常用的字符串查找函数包括:
search(p,text):在text字符串中查找匹配的内容,如果找到,则返回第一个匹配的Match对象,否则返回None。p是正则表达式
findall(p,text):在text字符串中查找所有匹配的内容,如果找到,则返回所有匹配的字符串列表,如果没有匹配的内容,则返回None。p是正则表达式
'''
p=r'\w+@lingjie\.li'
text='我的邮箱是u@lingjie.li'
m=re.search(p,text)
print(m) #match='我的邮箱是u@lingjie.li'>
p=r'Java|java|JAVA'
text='test java Java and JAVA'
match_list=re.findall(p,text)
print(match_list) #['java', 'Java', 'JAVA']
#d+是匹配任意数字
p=r'\d+hello'
data='jia_jia 666hello com'
print(re.findall(p,data)) #['666hello']
print('-------------字符串替换----------------------')
'''正则表达式的字符串替换是sub(),该函数替换匹配的子字符串,返回值是替换之后的字符串
sub()语法格式如下:
re.sub(pattern,repl,string,count=0)
其中,参数与pattern是正则表达式,参数repl是用于替换的新字符串,参数string是即将被替换的旧字符串,参数与count是要替换的最大数量,默认是0(不限制替换数量)
'''
p=r'\d+' #匹配数字(出现一次或多次)正则表达式
text='AB12CD33EF'
replace_text=re.sub(p,'',text) #sub()函数省略参数count时,表示不限制替换数量
print(replace_text) #ABCDEF
replace_text=re.sub(p,'',text,count=1) #count=1表示只替换第一个符合条件的字符对象
print(replace_text) #ABCD33EF
print('--------------字符串分割-------------------------')
'''在Python中可以使用re模块的split()函数进行字符串分割,
该函数将按照匹配的字符串进行字符串分割,返回字符串列表对象,其语法格式为:
re.split(pattern,string,maxsplit=0)
其中,pattern是正则表达式,string是要分割的字符串,maxsplit是最大分割次数,默认为0(表示没有限制)
'''
p=r'\d+'
text='ab12ab13cc'
clist=re.split(p,text) #没有填写maxsplit参数则默认为0(无限制)
print(clist) #['ab', 'ab', 'cc']
clist=re.split(p,text,maxsplit=1) #只分割1次
print(clist) #['ab', 'ab13cc']