Python有什么模块,什么是Python模块
一.理解模块
1.什么是模块:模块是包含python定义和声明的文件,文件名的后缀是。py,但实际上导入加载的模块分为四大类:
1.用python写的代码(。py文件)
2.已经编译成共享库II和DLL的C或C扩展
3.打包一组模块。
4.用C写的,连接到python解释器的内置模块
2.为什么要用Mo模块?
如果你想退出python解释器并重新进入,你之前定义的函数或变量将会丢失。因此,我们通常将程序写入一个文件中永久保存。必要的时候我们会通过python test.py来执行,这个叫做script脚本。
随着程序的发展,功能越来越多。为了管理的方便,我们通常把文件分成单独的文件,这样使得程序的结构更加清晰,也更容易管理。此时,我们不仅可以将这些文件作为脚本执行,还可以将它们作为模块导入到其他模块中,从而实现功能的重用。
二、常用模块分类
通用模块1:
搭配模块
时间模块
随机模块
操作系统模块
系统模块
序列化模块
Re模块
通用模块2:这些模块与面向对象相关。
Hashlib模块
Configparse模块
记录模块
第三,正则表达式
像我们平时看到的报名页面,都需要输入手机号。你认为我们的电话号码有限吗?(手机号一共11位,只以13、14、15、17、18开头。)如果你输入错误,会有提示。所以,如果要实现这个程序,你以为While循环那么好用吗?我们来看看实现结果。
1 whileTrue:2 phone_number=input(请输入您的电话号码:)3 if len(phone_number)==11 and phone _ number . is digit()\ 4 and(phone _ number .以( 13) \ 5或phone _ number开头。以( 14) \ 6或phone _ number开头。以( 15) \ 7或phone _ number开头。以( 17) \ 8或phone _ number开头。开头为( 18 ):9 print(是合法的手机号码。
判断手机号是否合法。
看到这段代码,虽然很好理解,但是我有一个更简单的方法。让我们一起来看看吧。
1 importre2 phone _ number=input(请输入您的电话号码:)3if re。match((13 14 15 17 18)[0-9]{ 9 } $ ,phone _ number): 4 此符号表示是否为13。5 [0-9]: []表示一个字符组,可以表示从0到9的任意字符。6 {9}:表示以下数字重复九次。7 $:意思是终结者8
9 print(是合法手机号码)10 else:11 print(不是合法手机号码)
判断输入的手机号码是否合法。
大家可能觉得第一种方法更简单,但是如果我让你从整个文件中匹配所有的手机号,你能用python写吗?但是导入re模块,使用正则表达式,可以解决这个问题。
那么什么是规律性呢?
你首先需要知道的是,当涉及到正则化时,它只与字符串有关。在线测试工具http://tool.chinaz.com/regex/
比如你想把 1 和 1 匹配,或者 2 和 2 匹配,可以直接匹配。
角色组:[角色组]
可能出现在同一位置的各种字符组成一个字符组,在正则表达式中用[]表示。
字符分为许多类别,如数字、字母、标点符号等。
如果你现在问一个位置‘只能出现一个数字’,那么这个位置的字符只能是0,1,2,3.9,这是数字之一。
角色组:
字符:
量词:$
* ?{}
注意:前面的*,等等。贪婪匹配,即尽可能多的匹配,后面是?就变成了非贪婪匹配,也就是惰性匹配。
贪婪匹配:
几种常用的匹配贪婪匹配。*?用法:
字符集:
分组()和or []:
例如,在html源代码中
Xxx标签,以之前的知识,我们只能确定源代码中的和是固定的。所以,如果你想得到页面标题(xxx),充其量只能写一个类似这样的表达式:*,而且这样写出来的东西匹配的是完整的xxx标签,而不仅仅是页面标题xxx。3解决以上问题,要用到断言知识。四
在谈论断言之前,读者应该先了解分组,这对理解断言是有帮助的。六
7分组在正则化中用()表示。按照配菜的理解,分组有两个作用:8
九
10
1N把一些规律看成一个群体,然后在群体层面上重复,可以得到意想不到的结果。12
13 n分组后,可以通过后向引用简化表达式。14
15
16
17
18
9我们先来看第一个函数。对于IP地址匹配,可以简单地写成以下形式:20
二十一日。\d{1,3}。\d{1,3}。\d{1,3}22
23但是经过仔细观察,我们可以发现某些规律,我们可以考虑。\d{1,3}作为一个整体,即把它们当作一组,重复这个组三次。表达式如下:24
25分钟。{1,3}){3}26
这样,就更简洁了。28
29
30
1再看第二个函数,取匹配。
对于xxx标签,简单的正则性可以这样写:32 33。* 34
35可以看出,上面的表达式中有两个title,完全一样。其实可以通过分组来缩写。表达式如下:36
37 .*\1
38
39这个例子实际上是反向引用的实际应用。对于分组,整个表达式总是被计为第0组。在本例中,第0组是。*\1,然后分组编号从左到右,所以,(title)是第1组。40
4使用语法\1,可以引用某个组的文本内容。\1当然是指第一组的文字内容。这样可以简化正则表达式,只写一次标题,放在组里,以后再引用。四十二个
受此启发,能不能简化一下刚才IP地址的正则表达式?原始表达式是\d{1,3}(。\d{1,3}){3},并且里面的\d{1,3}重复了两次。如果使用向后引用来简化,表达式如下:44
45 (\d{1,3})(。\1){3}46
47简单地说,把d{1,3}放在一个群中,记为(\d{1,3})。它是第一组,和(。\1)是第二组。第二组采用\1语法,第一组的课文内容反向引用。48
49实际测试后会发现这个写法是错的。为什么?50
51菜一直在强调向后引用的只是文本内容,不是正则表达式!五十二个
53也就是说,组内的内容一旦匹配成功,就会被引用回去,这里指的是匹配成功后的内容,指的是结果,而不是表达式。54
5因此,表达式(\d{1,3})(。\1){3}实际上匹配四个相同编号的IP地址,例如123.123.123.123。五十六岁
57
58
59至此,读者已经掌握了传说中的反向引语。就这么简单。
对分组的理解
分组:语法(?p)注意先命名,后正规化。
进口
ret=re.search(\w ,
Hello)print(ret.group())#为该组命名。就用下面的分组来命名吧。上面的方法与下面的分组命名相同,只是a name ret=re.search(\w )\w(?P=tag_name),
你好’)#(?P=tag_name)代表(\w) print(ret.group())# know(同上,是上述方式的缩写)
ret=re.search(r\w \1 ,
hello’)print(ret . group(1))转义符:
四。re模块
1 # 1.RE模块下的常用方法
2 #1.findall方法
3 import 4 ret=re . find all( a , EVA Angegons) 5 # #返回所有符合匹配条件的结果并放入列表中。
6打印(ret)7
8 #2 .搜索方法
9 #函数将在字符串中查找模式匹配,只查找第一个匹配,然后返回它。
10 #包含匹配信息的对象,通过调用group()方法进行匹配。
1 #字符串,如果字符串不匹配,将会报错。
1ret=re.search (s , EVA Angegons) #查找第一个
13 print(ret.group())14
15
16 #3 .匹配方法
7打印(关于。匹配( a , ABC )。Group ()) 18 #和search一样,只从字符串中匹配,guoup就能找到。
19
20
21 #4 .拆分方法
2打印(参考Split ([AB], Abcd)) 23 #先除以 A 得到和 bcd ,再除以 B 分别得到和 bcd 。
24
25
26 #5.sub方法
2打印(参考Sub (\ d , h , EVA 3 SDF 4 AHI 4 ASD 45 ,1)) 28 #用 h 替换数字,参数1表示只替换一个。
29
30
31 #6.subn方法
3打印(参考。Subn (\ d , h , EVA 3 SDF 4 AHI 4 ASD 45)) 33 #用 h 替换数字并返回元组(替换的结果和被替换的次数)
34
35
36 #7 .编译方法
3obj=re.pile (\ d {3}) #将正则表达式编译成正则表达式对象,规则要匹配三个数。
38 print(obj)39 ret=obj . search( ABC 12345 eeeee )#正则表达式对象调用search,参数是要匹配的字符串。
40 print(ret.group()) #。组立刻显示结果。
41
42 #8.finditer方法
3ret=re。Finder (\ d , DSF546SFSC) # Finder返回保存匹配结果的迭代器。
44 #打印(ret)#
4打印(下一页(返回))。group ()) #检查第一个结果
4打印(下一页(返回))。group ()) #检查第二个结果
4PRINT ([i.group () for i in ret]) #查看剩余的左右结果
与模块相关的方法
1importre2ret=re。findall (www。(百度 oldboy)。com , www .老男孩。com) 3print (ret) #结果是[oldboy]。这是因为findall会优先返回匹配结果组的内容。如果想匹配结果,取消权限即可。
四
5 ret=re.findall(www。(?百度oldboy)。com , www . old boy . com )6 print(ret)#[ www . old boy . com ]
findall的优先级查询
1=ret。split (\ d , EVA 123 DASD A9 DG) #除以数字。
2 print(ret) #输出结果:[eva , dasda , dg]
三
4 ret=re.split ((\ d ),伊娃123 DASD A9 DG) 5 print (ret) #输出结果:[伊娃, 123 , DASD , 9 , DG]
6 #
7 #匹配部分加()后和不带括号后的裁剪结果是不一样的,
8 #不带括号的不保留匹配项,带括号的可以保留。
9 #匹配项,这在一些匹配件的使用过程中非常重要。
拆分的优先级查询
环模和正则表达式的关系:
Re模块与正则表达式无关。re模块和正则表达式的关系类似于时间模块和时间的关系。在你学习python之前,你不知道有时间模块,但是你已经知道时间了。12: 30是指中午12:30。时间有自己的格式,年、日、分、秒,这已经成为一种规律。你早就想起来,时间模块只是python提供的一个工具,方便我们操作时间。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。