Python有什么模块,什么是Python模块

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: