首页 > 编程语言 > 详细

python基础篇13-模块

时间:2018-01-30 22:40:27      阅读:293      评论:0      收藏:0      [点我收藏+]

 

time模块

 1 import time
 2 #print(help(time))  查看帮助
 3 
 4 print(time.time())    #1517193182.0534253   时间戳(s),unix诞生以来开始计算
 5 time.sleep(3)         #休眠3s
 6 print(time.clock())   #7.551609587825597e-07  计算cpu执行时间(不包括上面的3s)
 7 print(time.gmtime())  #结构化时间:time.struct_time(tm_year=2018, tm_mon=1, tm_mday=29, tm_hour=2, tm_min=36, tm_sec=5, tm_wday=0, tm_yday=29, tm_isdst=0) 即UTC(世界标准)时间,和北京时间差8h
 8 print(time.localtime())  #本地时间:time.struct_time(tm_year=2018, tm_mon=1, tm_mday=29, tm_hour=10, tm_min=45, tm_sec=10, tm_wday=0, tm_yday=29, tm_isdst=0)
 9 
10 #print(time.strftime(format,p_tuple))
11 print(time.strftime("%Y-%m-%d %H:%M:%S" ))  #字符串时间即自定义格式输出日期 2018-01-29 10:55:02
12 struct_time=time.localtime()
13 print(time.strftime("%Y-%m-%d %H:%M:%S",struct_time))  #将结构化时间以字符串时间输出:2018-01-29 10:58:51
14 
15 #time.strptime(string,format)  将字符串时间以结构化时间输出
16 print(time.strptime("2018-01-29 10:58:51","%Y-%m-%d %H:%M:%S"))  #time.struct_time(tm_year=2018, tm_mon=1, tm_mday=29, tm_hour=10, tm_min=58, tm_sec=51, tm_wday=0, tm_yday=29, tm_isdst=-1)
17 #取某个时间值:
18 a=time.strptime("2018-01-29 10:58:51","%Y-%m-%d %H:%M:%S")
19 print(a.tm_hour)   #10
20 print(a.tm_mon)    #1
21 
22 #time.ctime(seconds)
23 print(time.ctime())  #取当前时间:Mon Jan 29 11:11:09 2018
24 print(time.ctime(234566))  #将给定的时间以看得懂的方式输出(unix诞生以来的时间开始计算)
25 
26 #time.mktime(p_tuple)
27 a=time.localtime()
28 print(time.mktime(a))  #将本地时间转化为时间戳:1517195833.0

 

 

datatime模块

1 import datetime
2 print(datetime.datetime.now())   #2018-01-29 11:20:48.342246

 

 

random模块

 1 import random
 2 print(random.random())  #取0-1内的随机数
 3 print(random.randint(1,8))  #1-8内的随机数,包括8
 4 print(random.choice("hello")) #在给定的字符串选取随机数
 5 print(random.choice([1,2,3,4,5])) #也可以放列表
 6 print(random.sample([1,2,[3,4]],2)) #在序列中随机选2个
 7 print(random.randrange(1,10))  #取1-10的数,不包括10
 8 
 9 
10 #生成随机验证码
11 import random
12 checkcode = ‘‘
13 for i in range(4):
14     current = random.randrange(0,4)
15     if current != i:
16         temp = chr(random.randint(65,90))
17     else:
18         temp = random.randint(0,9)
19     checkcode += str(temp)
20 print checkcode

 

 

os模块

提供对操作系统进行调用的接口。

r:以字符原意思输出。

 1 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径;
 2 os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd ;os.chdir(r‘F:\code‘)
 3 os.curdir  返回当前目录: (.)
 4 os.pardir  获取当前目录的父目录字符串名:(..)
 5 os.makedirs(dirname1/dirname2)    可生成多层递归目录;os.makedirs(r‘abc\lriwu\alen‘)
 6 os.removedirs(dirname1)    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推  ;s.removedirs(r‘abc\lriwu\alen‘)
 7 os.mkdir(dirname)    生成单级目录;相当于shell中mkdir dirname
 8 os.rmdir(dirname)    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
 9 os.listdir(dirname)    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
10 os.remove()  删除一个文件
11 os.rename("oldname","newname")  重命名文件/目录
12 os.stat(path/filename)  获取文件/目录信息
13 os.sep    输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
14 os.linesep    输出当前平台使用的行终止符,win下为"\r\n",Linux下为"\n"
15 os.pathsep    输出用于分割文件路径的字符串;windows:‘;‘  linux:‘:‘
16 os.name    输出字符串指示当前使用平台。win->nt; Linux->posix
17 os.system("bash command")  运行shell命令,直接显示
18 os.environ  获取系统环境变量
19 os.path.abspath(path)  返回path规范化的绝对路径;print(os.path.abspath(‘./os.py‘))
20 os.path.split(path)  将path分割成目录和文件名二元组返回
21 os.path.dirname(path)  返回path的目录。其实就是os.path.split(path)的第一个元素
22 os.path.basename(path)  返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
23 os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
24 os.path.isabs(path)  如果path是绝对路径,返回True
25 os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
26 os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
27 os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
28 os.path.getatime(path)  返回path所指向的文件或者目录的最后存取时间
29 os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间

 

 

sys模块

1 sys.argv           命令行参数List,第一个元素是程序本身文件名
2 sys.exit(n)        退出程序,正常退出时exit(0)
3 sys.version        获取Python解释程序的版本信息
4 sys.maxint         最大的Int值
5 sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
6 sys.platform       返回操作系统平台名称
7 sys.stdout.write(please:)
8 val = sys.stdin.readline()[:-1]

 

 

hashlib模块

用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法;

 1 import hashlib
 2  
 3 m = hashlib.md5()
 4 m.update("Hello".encode(utf8)) #python3中,内存中的字符串都是unicode类型,update参数一定需要接收bytes类型,所以需要encode转换(因为python3中只有bytes和str两种数据类型)
 5 m.update("It‘s me".encode(utf8)) 
 6 print(m.digest()) #2进制格式hash   b‘]\xde\xb4{/\x92Z\xd0\xbf$\x9cR\xe3Br\x8a‘
 7 print(len(m.hexdigest())) #16进制格式hash 5ddeb47b2f925ad0bf249c52e342728a
 8 
 9 
10 #加密过程等同于:
11 m2 = hashlib.md5()
12 m2.update("HelloIt‘s me".encode(utf8)) 
13 print(len(m2.hexdigest())) #16进制格式hash 5ddeb47b2f925ad0bf249c52e342728a
14 
15 
16 
17 
18 import hashlib
19  
20 # ######## md5 ########
21  
22 hash = hashlib.md5()
23 hash.update(admin)
24 print(hash.hexdigest())
25  
26 # ######## sha1 ########
27  
28 hash = hashlib.sha1()
29 hash.update(admin)
30 print(hash.hexdigest())
31  
32 # ######## sha256 ########
33  
34 hash = hashlib.sha256()
35 hash.update(admin)
36 print(hash.hexdigest())
37  
38  
39 # ######## sha384 ########
40  
41 hash = hashlib.sha384()
42 hash.update(admin)
43 print(hash.hexdigest())
44  
45 # ######## sha512 ########
46  
47 hash = hashlib.sha512()
48 hash.update(admin)
49 print(hash.hexdigest())

 

logging模块

1.简单应用

 1 import logging  
 2 logging.debug(debug message)  
 3 logging.info(info message)  
 4 logging.warning(warning message)  
 5 logging.error(error message)  
 6 logging.critical(critical message)  
 
 
 
 #输出
 WARNING:root:warning message
 ERROR:root:error message
 CRITICAL:root:critical message

 

 可见,默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING(日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET),默认的日志格式为日志级别:Logger名称:用户输出消息。

 

2.灵活配置日志级别,日志格式,输出位置(文件输出和标准输出只能选一种)

 1 import logging  
 2 logging.basicConfig(level=logging.DEBUG,  
 3                     format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s,  
 4                     datefmt=%a, %d %b %Y %H:%M:%S,  
 5                     filename=/tmp/test.log,  
 6                     filemode=w)  
 7   
 8 logging.debug(debug message)  
 9 logging.info(info message)  
10 logging.warning(warning message)  
11 logging.error(error message)  
12 logging.critical(critical message)
 
 
 
 #查看输出:
 cat /tmp/test.log 
 Mon, 05 May 2014 16:29:53 test_logging.py[line:8] DEBUG debug message
 Mon, 05 May 2014 16:29:53 test_logging.py[line:9] INFO info message
 Mon, 05 May 2014 16:29:53 test_logging.py[line:10] WARNING warning message
 Mon, 05 May 2014 16:29:53 test_logging.py[line:11] ERROR error message
 Mon, 05 May 2014 16:29:53 test_logging.py[line:12] CRITICAL critical message

 

可见在logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有
filename:用指定的文件名创建FiledHandler(后边会具体讲解handler的概念),这样日志会被存储在指定的文件中。
filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。(a:追加写;w:覆盖写)

  注意:如果没有指定filename和filemode,默认将日志打印到了标准输出中。
format:指定handler使用的日志显示格式。
datefmt:指定日期时间格式。
level:设置rootlogger(后边会讲解具体概念)的默认日志级别
stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open(‘test.log‘,‘w‘)),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。

format参数中可能用到的格式化串:
%(name)s Logger的名字
%(levelno)s 数字形式的日志级别
%(levelname)s 文本形式的日志级别
%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%(filename)s 调用日志输出函数的模块的文件名
%(module)s 调用日志输出函数的模块名
%(funcName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(thread)d 线程ID。可能没有
%(threadName)s 线程名。可能没有
%(process)d 进程ID。可能没有
%(message)s用户输出的消息

 

3.logger对象

 上述几个例子中我们了解到了logging.debug()、logging.info()、logging.warning()、logging.error()、logging.critical() 分别用以记录不同级别的日志信息;logging.basicConfig() 用默认日志格式为日志系统建立一个默认的流处理器:设置基础配置(如日志级别等)并加到root logger中,这几个是logging模块级别的函数;另外还有一个模块级别的函数是logging.getLogger([name])(返回一个logger对象,如果没有指定名字将返回root logger)

先看一个最简单的过程:

 1 import logging
 2 #创建一个日志(logger)对象
 3 logger = logging.getLogger()
 4 
 5 # 创建一个handler即文件输出流对象,用于写入日志文件
 6 fh = logging.FileHandler(test.log)
 7 
 8 # 再创建一个handler即标准输出流对象,用于输出到控制台
 9 ch = logging.StreamHandler()
10 
11 #日志格式对象
12 formatter = logging.Formatter(%(asctime)s - %(name)s - %(levelname)s - %(message)s)
13 
14 fh.setFormatter(formatter)  #为文件输出设置日志格式
15 ch.setFormatter(formatter)  #为标准输出设置日志格式
16 
17 #通过addHandler为logger添加文件输出对象和标准输出对象
18 logger.addHandler(fh) #logger对象可以添加多个fh和ch对象
19 logger.addHandler(ch)
20 #logger1.setLevel(logging.DEBUG)   设置输出日志级别,不指定默认是warnning
21 logger.debug(logger debug message)
22 logger.info(logger info message)
23 logger.warning(logger warning message)
24 logger.error(logger error message)
25 logger.critical(logger critical message)

 

输出:

#控制台输出
2018-01-30 09:53:10,887 - root - WARNING - logger warning message
2018-01-30 09:53:10,887 - root - ERROR - logger error message
2018-01-30 09:53:10,887 - root - CRITICAL - logger critical message



#文件输出
cat test.log
2018-01-30 09:53:10,887 - root - WARNING - logger warning message
2018-01-30 09:53:10,887 - root - ERROR - logger error message
2018-01-30 09:53:10,887 - root - CRITICAL - logger critical 

 

 流程图:

技术分享图片

 

4.应用

技术分享图片
 1 import os
 2 import time
 3 import logging
 4 from config import settings
 5 
 6 
 7 def get_logger(card_num, struct_time):
 8 
 9     if struct_time.tm_mday < 23:
10         file_name = "%s_%s_%d" %(struct_time.tm_year, struct_time.tm_mon, 22)
11     else:
12         file_name = "%s_%s_%d" %(struct_time.tm_year, struct_time.tm_mon+1, 22)
13 
14     file_handler = logging.FileHandler(
15         os.path.join(settings.USER_DIR_FOLDER, card_num, record, file_name),
16         encoding=utf-8
17     )
18     fmt = logging.Formatter(fmt="%(asctime)s :  %(message)s")
19     file_handler.setFormatter(fmt)
20 
21     logger1 = logging.Logger(user_logger, level=logging.INFO)
22     logger1.addHandler(file_handler)
23     return logger1
View Code

 

 

 ConfigParser模块

常用配置文件的格式如下:

 1 [DEFAULT]
 2 ServerAliveInterval = 45
 3 Compression = yes
 4 CompressionLevel = 9
 5 ForwardX11 = yes
 6   
 7 [bitbucket.org]
 8 User = hg
 9   
10 [topsecret.server.com]
11 Port = 50022
12 ForwardX11 = no

使用python生成一个这样的文档:

 1 import configparser
 2 
 3 config = configparser.ConfigParser()   #生成一个文件操作句柄
 4 config["DEFAULT"] = {ServerAliveInterval: 45,
 5                      Compression: yes,
 6                      CompressionLevel: 9}
 7 
 8 config[bitbucket.org] = {}
 9 config[bitbucket.org][User] = hg
10 config[topsecret.server.com] = {}
11 topsecret = config[topsecret.server.com]
12 topsecret[Host Port] = 50022  # mutates the parser
13 topsecret[ForwardX11] = no  # same here
14 config[DEFAULT][ForwardX11] = yes
15 with open(example.ini, w) as configfile:   #创建文件
16     config.write(configfile)

 

 

增删改查操作:

 1 import configparser
 2 
 3 config = configparser.ConfigParser()
 4 #---------------------------------------------查
 5 print(config.sections())   #[]
 6 config.read(example.ini)   #关联文件
 7 print(config.sections())    #[‘bitbucket.org‘, ‘topsecret.server.com‘] 即打印字段,default是默认字段,不会显示出来
 8 print(config.defaults())    #OrderedDict([(‘compression‘, ‘yes‘), (‘compressionlevel‘, ‘9‘), (‘serveraliveinterval‘, ‘45‘), (‘forwardx11‘, ‘yes‘)]) 查看default字段下的所有属性以及属性值
 9 print(config.items(bitbucket.org))  #[(‘serveraliveinterval‘, ‘45‘), (‘compression‘, ‘yes‘), (‘compressionlevel‘, ‘9‘), (‘forwardx11‘, ‘yes‘), (‘user‘, ‘hg‘)] 查看非default字段下的所有属性以及属性值
10 print(config.options(bitbucket.org))#[‘user‘, ‘serveraliveinterval‘, ‘compression‘, ‘compressionlevel‘, ‘forwardx11‘] 查看字段下的属性
11 print(bytebong.com in config)# False   查看配置文件中是否有该字段
12 print(config.has_section(bitbucket.org))  #查看配置文件中是否有该字段
13 print(config[bitbucket.org][User]) # hg   查看属性值
14 
15 for key in config:
16     print(key)
17 # 输出:打印config下的所有字段
18 # DEFAULT
19 # bitbucket.org
20 # topsecret.server.com
21 
22 
23 for key in config[bitbucket.org]:
24     print(key)
25 # 输出:bitbucket.org字段下的属性以及default字段下的属性
26 # user
27 # compression
28 # compressionlevel
29 # serveraliveinterval
30 # forwardx11
31 
32 #---------------------------------------------删,改,增
33 
34 #删除字段
35 config.remove_section(topsecret.server.com)
36 
37 #添加字段
38 config.add_section(yuan)
39 
40 #修改属性值
41 config.set(bitbucket.org,user,lriwu)
42 
43 #删除键值对
44 config.remove_option(bitbucket.org,user)
45 
46 
47 (config.write(open(r.cfg, "w")))  #最后这句语句是必须的

 

 

re模块

正则表达式(或 RE)是一种小型的、高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模块被编译成一系列的字节码,然后由C 编写的匹配引擎执行。

作用:字符串提供的方法是完全匹配,无法实现模糊匹配,所以引入正则的原因是可以实现模糊匹配。

 

字符匹配(普通字符,元字符):

1.普通字符:字符串提供的方法是完全匹配,无法实现模糊匹配。

1 import re
2 re.findall(‘w\w{2}l‘, ‘hello world‘)  #[‘worl‘]  模糊匹配
3 re.findall(‘alex‘,‘yuanaleSxalexwupeiqi‘) #[‘alex‘] 精确匹配(如果只实现这一功能,使用字符串的方法就可以了)

 

2.元字符:可以实现模糊匹配

  • 元字符之. ^ $ * + ? { }
 1 import re
 2 
 3 #‘.‘:匹配任意字符一次(不能匹配换行符)
 4 ret = re.findall(a..in, helloalvin)
 5 print(ret)  # [‘alvin‘]
 6 
 7 #‘^‘:行首匹配
 8 ret = re.findall(^a...n, alvinhelloawwwn)
 9 print(ret)  # [‘alvin‘]
10 
11 #‘$‘:行尾匹配
12 ret = re.findall(a...n$, alvinhelloawwwn)
13 print(ret)  # [‘awwwn‘]
14 
15 #‘*‘:即匹配前面的字符[0,+oo]次
16 ret = re.findall(abc*, abcccc)
17 print(ret)  # [‘abcccc‘]   #贪婪匹配
18 ret = re.findall(abc*, ab)
19 print(ret)  # [‘ab‘]   #匹配0次例子
20 
21 #‘+‘:匹配前面的字符[1,+oo]次即匹配前面的字符至少一次
22 ret = re.findall(abc+, abccc)
23 print(ret)  # [‘abccc‘]  #贪婪匹配
24 
25 #‘?‘:匹配前面的字符[0,1]次
26 ret=re.findall(abc?,abccc)#[0,1]
27 print(ret)#[‘abc‘]  #贪婪匹配
28 ret = re.findall(a?b, aaaabhghabfb)
29 print(ret)  # [‘ab‘,‘ab‘,‘b‘]
30 
31 
32 ret = re.findall(abc{1,4}, abccc)  #匹配前面的1-4次都行
33 print(ret)  # [‘abccc‘]  贪婪匹配
34 ret = re.findall(a{5}b,aaaaab)  #aaaaab  匹配前面的5次

注意:前面的*,+,?等都是贪婪匹配,也就是尽可能多次匹配,后面加?号使其变成惰性匹配即按照最少的进行匹配;

1 ret=re.findall(abc*?,abcccccc)
2 print(ret)#[‘ab‘]

 

  • 元字符之字符集[]:
 1 # --------------------------------------------字符集[]
 2 ret = re.findall(a[bc]d, acd)   #或的关系[b,c]表示b或c
 3 print(ret)  # [‘acd‘]
 4 
 5 ret = re.findall([a-z], acd)
 6 print(ret)  # [‘a‘, ‘c‘, ‘d‘]
 7 
 8 #取消元字符的特殊功能
 9 ret = re.findall([.*+], a.cd+)  #这里的.*+只表示自身意义
10 print(ret)  # [‘.‘, ‘+‘]
11 
12 # 在字符集里仍有功能的符号: - ^ \
13 ret = re.findall([1-9], 45dha3)     #‘-‘代表范围
14 print(ret)  # [‘4‘, ‘5‘, ‘3‘]
15 
16 ret = re.findall([^a,b], 45bdha3)    #‘^‘代表取反即除了a和b以外的
17 #等同于:ret = re.findall(‘[^ab]‘, ‘45bdha3‘)
18 print(ret)  # [‘4‘, ‘5‘, ‘d‘, ‘h‘, ‘3‘]
19 
20 
21 # 反斜杠后边跟元字符去除特殊功能,比如\.
22 # 反斜杠后边跟普通字符实现特殊功能,比如\d,相当于类 [0-9]
23 ret = re.findall([\d], 45bdha3)
24 print(ret)  # [‘4‘, ‘5‘, ‘3‘]

反斜杠后边跟元字符去除特殊功能,比如\.

反斜杠后边跟普通字符实现特殊功能,比如\d

\d  匹配任何十进制数;它相当于类 [0-9]。
\D 匹配任何非数字字符;它相当于类 [^0-9]。
\s  匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。
\S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。
\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
\b  匹配一个特殊字符边界,比如空格 ,&,#,$等

1 ret=re.findall(I\b,I am LIST)
2 print(ret)#[]   
3 ret=re.findall(rI\b,I am LI$T)
4 print(ret)#[‘I‘,‘I‘]

 

 现在我们聊一聊\,先看下面两个匹配:

 1 #-----------------------------eg1:
 2 import re
 3 ret=re.findall(c\l,abc\le)
 4 print(ret)#[]   没有匹配
 5 ret=re.findall(c\\l,abc\le)
 6 print(ret)#[]   没有匹配
 7 ret=re.findall(c\\\\l,abc\le)    #在python解释器里先将‘\\\\’转义成‘\\’;再在re模块里将‘\\‘转义成‘\’ ,即就匹配到了‘c\l’
 8 print(ret)#[‘c\\l‘]   匹配到了
 9 ret=re.findall(rc\\l,abc\le)     #r表示告诉python解释器里面的字符串就是原生字符串,在python接收器中无需转义
10 print(ret)#[‘c\\l‘]    匹配到了
11  
12 #-----------------------------eg2:
13 #之所以选择\b是因为\b在ASCII表中是有意义的
14 m = re.findall(\bblow, blow)
15 print(m)  #[]     没有匹配
16 m = re.findall(r\bblow, blow)
17 print(m)  #[‘blow‘]   匹配到了

 

技术分享图片

  

  • 元字符之分组()
1 print(re.search((as)+,sdjkfasas).group())   #asas    ‘+‘ 匹配前面分组[1,+oo]次
2 ret = re.findall(‘www.(\w+).com‘,‘www.baidu.com‘) #[‘baidu‘] 只会打印出组中的内容
3  ret = re.findall(‘www.(?:\w+).com‘,‘www.baidu.com‘) #[‘www.baidu.com‘] 取消组的权限

 

 

1 ret=re.search((?P<id>\d{2}),23/com)  #?P<id> 为分组取名字为id
2 print(ret.group())#23
3 print(ret.group(id))#23  #通过分组名取匹配到的值

 

  • 元字符之或 |
ret=re.search(‘(?P<id>\d{2})/(?P<name>\w{3})‘,‘23/com‘)
 print(ret.group())#23/com     
 print(ret.group(‘id‘))#23

 

  • re模块下的常用方法
 1 import re
 2 
 3 # 1
 4 re.findall(a, alvin yuan)  # [‘a‘, ‘a‘]即返回所有满足匹配条件的结果,放在列表里
 5 # 2
 6 re.search(a, alvin yuan).group()  # ‘a‘ 即返回匹配到的第一个对象,对象可以调用group()返回结果;如果字符串没有匹配,则返回None。
 7 
 8 # 3
 9 re.match(a, abca).group()  # ‘a‘ 同search,不过只在字符串开始处进行匹配
10 
11 # 4 分割
12 ret = re.split(b, abcd)
13 print(ret)  # [‘a‘, ‘cd‘]
14 
15 ret = re.split([ab], abcd)  # 先按‘a‘分割得到‘‘和‘bcd‘,在对‘‘和‘bcd‘分别按‘b‘分割
16 print(ret)  # [‘‘, ‘‘, ‘cd‘]
17 
18 ret = re.split([js], sdjksal)  #[‘‘, ‘d‘, ‘k‘, ‘al‘]
19 
20 # 5 替换
21 ret = re.sub(\d, abc, alvin5yuan6, 1)
22 print(ret)  # alvinabcyuan6
23 ret = re.subn(\d, abc, alvin5yuan6)  #没有指定第三个参数,全部替换
24 print(ret)  # (‘alvinabcyuanabc‘, 2)
25 
26 # 6  compile可以把正则表达式编译成一个正则表达式对象,可以把经常使用的正则表达式编译成正则表达式对象,这样可以提高一定的效率。
27 obj = re.compile(\d{3})  #实现一种规则可以匹配多次
28 ret = obj.search(abc123eeee)
29 print(ret.group())  # 123
30
31 #7
32 ret = re.finditer(‘\d‘,‘ds3sy4784a‘)
33 print(res) #<callable_iterator object at 0x00000233DBFA5208> 返回的结果是迭代器对象
34 print(next(ret).group()) #3

 

python基础篇13-模块

原文:https://www.cnblogs.com/lriwu/p/8378557.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!