Python基础--常用模块
1.什么是模块
随着代码越写越多,不容易维护,为了编写维护,我们把函数分组,分别放在不同的文件里,一个.py文件就是一个模块(Module)。
2.模块的分类
模块分为三种:
- 自定义模块 创建一个.py文件,就称之为模块
- 第三方模块 可以通过pip install 模块名连网安装
- 内置模块(标准库)执行help(‘module‘)查看只带模块列表
模块的调用
import module from module.xx.xx import xx from module.xx.xx import xx as rename from module.xx.xx import *
注意:模块一旦被调用,即相当于执行了另外一个py文件里的代码
模块查找路径
import sys print(sys.path)
输出
[‘C:\\Users\\Administrator\\PycharmProjects\\untitled1\\xdlj\\crm‘, ‘C:\\Users\\Administrator\\PycharmProjects\\untitled1‘, ‘C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\python36.zip‘, ‘C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\DLLs‘, ‘C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib‘, ‘C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36‘, ‘C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages‘]
>>> import random >>> random.randint(10,99) #随机取两位数包括99 89 >>> random.randint(10,99) 84 >>> random.randint(10,99) 37 >>> random.randint(10,99) 60 >>>
https://pypi.python.org/pypi 是python的开源模块库
3.time &datetime模块
时间相关的操作,时间有三种表示方式:
- 时间戳 1970年1月1日之后的秒,即:time.time()
- 格式化的字符串 2014-11-11 11:11, 即:time.strftime(‘%Y-%m-%d‘)
- 结构化时间 元组包含了:年、日、星期等... time.struct_time 即:time.localtime()
time.time() #当前时间戳
>>> import time >>> time.time() 1522402027.3797266 >>> time.time() 1522402029.2438338 >>> time.time() 1522402030.6839154
>>> time.localtime() time.struct_time(tm_year=2018, tm_mon=3, tm_mday=30, tm_hour=17, tm_min=33, tm_sec=12, tm_wday=4, tm_yday=89, tm_isdst=0) >>> time.localtime() time.struct_time(tm_year=2018, tm_mon=3, tm_mday=30, tm_hour=17, tm_min=33, tm_sec=19, tm_wday=4, tm_yday=89, tm_isdst=0) >>>
time.mktime #将struct_time转换为时间戳
>>> a = time.localtime() >>> a time.struct_time(tm_year=2018, tm_mon=3, tm_mday=30, tm_hour=17, tm_min=44, tm_sec=38, tm_wday=4, tm_yday=89, tm_isdst=0) >>> time.mktime(a) 1522403078.0 >>>
time.gmtime()
#跟localtime()方法一样,gmtime()方法是将一个时间戳转化为UTC时区
>>> time.gmtime() time.struct_time(tm_year=2018, tm_mon=3, tm_mday=30, tm_hour=9, tm_min=38, tm_sec=41, tm_wday=4, tm_yday=89, tm_isdst=0) >>> time.gmtime() time.struct_time(tm_year=2018, tm_mon=3, tm_mday=30, tm_hour=9, tm_min=39, tm_sec=23, tm_wday=4, tm_yday=89, tm_isdst=0) >>>
time.strptime(
‘%Y-%m-%d‘
) #转换为格式化的时间字符串
>>> time.strftime(‘%Y-%m-%d‘) ‘2018-03-30‘ >>> time.strftime(‘%Y-%m-%d %H:%M:%S‘) ‘2018-03-30 18:05:19‘ >>>
time.sleep(10) #线程推迟到10秒后运行
time.asctime()
>>> time.asctime() ‘Fri Mar 30 17:46:25 2018‘ >>>
time.ctime()
>>> time.ctime() ‘Fri Mar 30 17:48:12 2018‘ >>> time.ctime(123123) ‘Fri Jan 2 18:12:03 1970‘ >>>
time.strptime() #把一个格式时间字符串转换为struct_time。
>>> s = time.strftime(‘%Y-%m-%d %H:%M:%S‘) >>> s ‘2018-03-30 18:14:57‘ >>> time.strptime(s,‘%Y-%m-%d %H:%M:%S‘) time.struct_time(tm_year=2018, tm_mon=3, tm_mday=30, tm_hour=18, tm_min=14, tm_sec=57, tm_wday=4, tm_yday=89, tm_isdst=-1) >>>
4.datetime模块
时间运算
>>> import datetime >>> datetime.datetime.now() datetime.datetime(2018, 3, 30, 20, 21, 26, 880941) >>>
datetime.datetime(2018, 3, 30, 20, 26, 16, 960511) >>> datetime.datetime.now() + datetime.timedelta(4)#当前时间加4天 datetime.datetime(2018, 4, 3, 20, 27, 34, 736997) >>>
>>> datetime.datetime.now() datetime.datetime(2018, 3, 30, 20, 31, 35, 288874) >>> datetime.datetime.now() + datetime.timedelta(hours = 4)#当前时间加4小时 datetime.datetime(2018, 3, 31, 0, 31, 44, 257390) >>>
时间替换
>>> a = datetime.datetime.now() >>> >>> a = datetime.datetime.now() >>> a datetime.datetime(2018, 3, 30, 20, 34, 29, 480925) >>> a.replace(year = 2999,month = 11 ,day = 30) datetime.datetime(2999, 11, 30, 20, 34, 29, 480925) >>>
4.random模块
程序中很多地方用到随机字符,通过random模块很容易产生随机字符串
>>> import random >>> random.randint(1,100) #1-100的随机数,包括10 48 >>> >>> random.randint(1,100) 67 >>> random.randint(1,100) 29 >>> random.randint(1,100) 65 >>> random.randrange(1,100) #1-100的随机数,不包括10 29 >>> random.randrange(1,100) 3 >>> random.random()#返回一个浮点数 0.861331996925364 >>> random.random() 0.09635457023458294 >>> random.choice(‘[email protected];ld‘)#返回一个给定数集合的随机数 ‘d‘ >>> random.choice(‘[email protected];ld‘) ‘@‘ >>> random.choice(‘[email protected];ld‘) ‘d‘ >>> random.choice(‘[email protected];ld‘) ‘4‘ >>> random.sample(‘aldsrtvpq‘,3)#从多个数值中选取特定字符 [‘r‘, ‘a‘, ‘t‘] >>> random.sample(‘aldsrtvpq‘,3) [‘s‘, ‘a‘, ‘d‘] >>> random.sample(‘aldsrtvpq‘,3) [‘t‘, ‘a‘, ‘v‘] >>> import string >>> string.digits#0到9的数10进制 ‘0123456789‘ >>> string.ascii_letters#26个字母大小写 ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ‘ >>> string.hexdigits#16进制 ‘0123456789abcdefABCDEF‘ >>> string.octdigits#8进制 ‘01234567‘ >>> string.ascii_lowercase#26字母小写 ‘abcdefghijklmnopqrstuvwxyz‘ >>> s = string.ascii_lowercase + string.digits >>> s ‘abcdefghijklmnopqrstuvwxyz0123456789‘ >>> ‘‘.join(random.sample(string.ascii_lowercase + string.digits,6)) ‘i986wb‘ >>> >>> ‘‘.join(random.sample(s,4)) ‘7eo9‘ >>> ‘‘.join(random.sample(s,4)) ‘g9bk‘ >>> ‘‘.join(random.sample(s,4)) ‘tpzg‘ >>> >>> d = list(range(100))#0 - 100的数 >>> d [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99] >>> random.shuffle(d)#随机排序 >>> d [22, 60, 11, 8, 87, 73, 29, 17, 43, 64, 67, 27, 72, 92, 98, 40, 15, 36, 90, 79, 47, 32, 51, 12, 50, 23, 88, 4, 16, 13, 56, 18, 2, 96, 95, 45, 66, 65, 10, 1, 62, 81, 99, 46, 78, 3, 70, 25, 19, 77, 93, 42, 58, 39, 0, 34, 28, 35, 7, 31, 37, 54, 89, 26, 44, 57, 94, 59, 24, 6, 52, 75, 5, 38, 84, 85, 30, 9, 20, 33, 71, 41, 49, 21, 97, 69, 68, 82, 74, 14, 61, 86, 53, 63, 80, 83, 91, 55, 76, 48] >>>
5.os模块
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd os.curdir 返回当前目录: (‘.‘) os.pardir 获取当前目录的父目录字符串名:(‘..‘) os.makedirs(‘dir1/dir2‘) 可生成多层递归目录 os.removedirs(‘dirname1‘) 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 os.mkdir(‘dirname‘) 生成单级目录;相当于shell中mkdir dirname os.rmdir(‘dirname‘) 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname os.listdir(‘dirname‘) 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 os.remove() 删除一个文件 os.rename("oldname","new") 重命名文件/目录 os.stat(‘path/filename‘) 获取文件/目录信息 os.sep 操作系统特定的路径分隔符,win下为"\\",Linux下为"/" os.linesep 当前平台使用的行终止符,win下为"\t\n",Linux下为"\n" os.pathsep 用于分割文件路径的字符串 os.name 字符串指示当前使用平台。win->‘nt‘; Linux->‘posix‘ os.system("bash command") 运行shell命令,直接显示 os.environ 获取系统环境变量 os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False os.path.isabs(path) 如果path是绝对路径,返回True os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
6.sys模块
>>> import sys >>> sys.argv#命令形参数List,第一个元素是程序本身路径 [‘‘] >>> sys.exit(0)#退出程序 >>> sys.version#获取Python解释程序的版本信息 ‘3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)]‘ >>> sys.path#返回模块的搜索路径 [‘‘, ‘C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\python36.zip‘, ‘C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\DLLs‘, ‘C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib‘, ‘C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36‘, ‘C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages‘] >>> sys.platform #返回操作系统的平台名称 ‘win32‘ >>> sys.stdout.write(‘please:‘)#标准输出 输出字符个数 please:7 >>> sys.maxsize#最大的int值 9223372036854775807 >>> sys.stdout <_io.TextIOWrapper name=‘<stdout>‘ mode=‘w‘ encoding=‘utf-8‘> >>> sys.stdin.readline() aa ‘aa\n‘ >>> sys.getrecursionlimit()#获取最大的递归层数 1000 >>> sys.getrecursionlimit(1200)#设置最大的递归层数 >>> sys.getdefaultencoding()#获取解释器的默认编码 ‘utf-8‘ >>> sys.getfilesystemencoding#获取内存数据存到文件里的默认编码 <built-in function getfilesystemencoding> >>>
7.shutil模块
shutil.copyfileobj(fsrc, fdst[, length])
将文件内容拷贝到另一个文件中
import shutil shutil.copyfileobj(open(‘old.py‘,‘r‘),open(‘new.py‘,‘w‘))
shutil.copyfile(src, dst)
拷贝文件
import shutil
shutil.copyfile(‘old.txt‘,‘new.txt‘)
shutil.copymode(src, dst)
仅拷贝权限。内容、组、用户均不变
import shutil shutil.copymode(‘old.txt‘, ‘new.txt‘)
shutil.copystat(src, dst)
仅拷贝状态的信息,包括:mode bits, atime, mtime, flags
import shutil shutil.copystat(‘old.txt‘, ‘new.txt‘)
shutil.copy(src, dst)
拷贝文件和权限
mport shutil shutil.copy(‘old.txt‘, ‘new.txt‘)
shutil.copy2(src, dst)
拷贝文件和状态信息
import shutil shutil.copy2(‘old.txt‘, ‘new.txt‘)
shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)
递归的去拷贝文件夹
import shutil shutil.copytree(‘file1‘, ‘file2‘, ignore=shutil.ignore_patterns(‘*.pyc‘, ‘tmp*‘))
shutil.rmtree(path[, ignore_errors[, onerror]])
递归的去删除文件
import shutil shutil.rmtree(‘file1‘)
shutil.move(src, dst)
递归的去移动文件,它类似mv命令,其实就是重命名。
import shutil shutil.move(‘file1‘, ‘file3‘)
shutil.make_archive(base_name, format,...)
创建压缩包并返回文件路径,例如:zip、tar
创建压缩包并返回文件路径,例如:zip、tar
- base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
如:www =>保存至当前路径
如:/Users/xiaoqian/www =>保存至/Users/xiaoqian/ - format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
- root_dir: 要压缩的文件夹路径(默认当前目录)
- owner: 用户,默认当前用户
- group: 组,默认当前组
- logger: 用于记录日志,通常是logging.Logger对象
8.序列化
Python中用于序列化的两个模块
- json 用于【字符串】和 【python基本数据类型】 间进行转换
- pickle 用于【python特有的类型】 和 【python基本数据类型】间进行转换
Json模块提供了四个功能:dumps、dump、loads、load
pickle模块提供了四个功能:dumps、dump、loads、load
dump ,dumps :把内存数据转换成字符,叫序列化
load, loads:把字符串转换成数据类型 叫反序列化
只能dump ,load一次
import pickle # d = {‘name‘:‘qian‘,‘age‘:22} # # l = {1,2,3,4,‘rain‘} # # pk = open("data.pkl",‘wb‘)#写二进制用wb # pickle.dump(d,pk) f = open("data.pkl",‘rb‘) d = pickle.load(f) print(d)
json:
优点:跨语言、体积小
缺点:只支持 int\str\list\tuple\dict
pickle:
优点:专为python设计,支持python所有的数据类型
缺点:只能在python中使用,存数据占空间大
9.shelve模块
shelve模块是一个简单的 k , v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的Python数据格式
import shelve d = shelve.open(‘shelev_text‘) print(d["names"]) print(d[‘info‘]) #del d[‘test‘]#删除
10.xml模块
xml是实现不同语或程序之间进行分析
<?xml version="1.0"?> <data> <country name="Liechtenstein"> <rank updated="yes">2</rank> <year>2023</year> <gdppc>141100</gdppc> <neighbor direction="E" name="Austria" /> <neighbor direction="W" name="Switzerland" /> </country> <country name="Singapore"> <rank updated="yes">5</rank> <year>2026</year> <gdppc>59900</gdppc> <neighbor direction="N" name="Malaysia" /> </country> <country name="Panama"> <rank updated="yes">69</rank> <year>2026</year> <gdppc>13600</gdppc> <neighbor direction="W" name="Costa Rica" /> <neighbor direction="E" name="Colombia" /> </country> </data>
from xml.etree import ElementTree as ET tree = ET.parse("123")#open root = tree.getroot()#f.seek(0) #print(dir(root)) print(root.tag) #遍历xml文档 # for child in root: # print(child.tag,child.attrib) # for i in child: # print(i.tag,i.text) for node in root.iter(‘year‘): print(node.tag,node.text)
from xml.etree import ElementTree as ET tree = ET.parse("123")#open root = tree.getroot()#f.seek(0) for node in root.iter(‘year‘): new_year = int(node.text)+1 node.text = str(new_year) node.set("attr_text","yes") tree.write("123")
from xml.etree import ElementTree as ET tree = ET.parse("123")#open root = tree.getroot()#f.seek(0) for country in root.findall("country"): rank = int(country.find(‘rank‘).text) if rank > 50: root.remove(country) tree.write(‘ountpot.xml‘)
自动创建xml文档
import xml.etree.ElementTree as ET root = ET.Element("namelist") name = ET.SubElement(root,"name",attrib={"enrolled":"yes"}) age = ET.SubElement(name,"age",attrib={"checked":"no"}) sex = ET.SubElement(name,"sex") sex.text = ‘amle‘ name2 = ET.SubElement(root,"name",attrib={"enrolled":"no"}) age = ET.SubElement(name2,"age") age.text = ‘19‘ et = ET.ElementTree(root) et.write("build_out.xml",encoding="utf-8",xml_declaration=True)
11.configparser模块
configparser用于处理特定格式的文件,其本质上是利用open来操作文件。
1、获取所有节点
import configparser config = configparser.ConfigParser() config.read(‘ss.ini‘, encoding=‘utf-8‘) ret = config.sections() print(ret)
2、获取指定节点下所有的键值对
import configparser config = configparser.ConfigParser() config.read(‘ss.ini‘,encoding="utf-8") ret = config.items(‘section1‘) print(ret)
3、获取指定节点下所有的建
import configparser config = configparser.ConfigParser() config.read(‘ss.ini‘,encoding="utf-8") ret = config.options(‘section1‘) print(ret)
4、获取指定节点下指定key的值
import configparser config = configparser.ConfigParser() config.read(‘ss.ini‘,encoding="utf-8") ret = config.get(‘section1‘,‘k1‘) print(ret)
5、检查、删除、添加节点
import configparser config = configparser.ConfigParser() config.read(‘ss.ini‘, encoding=‘utf-8‘) # 检查 has_opt = config.has_option(‘section1‘, ‘k1‘) print(has_opt) # 删除 config.remove_option(‘section1‘, ‘k1‘) config.write(open(‘ss.ini‘, ‘w‘)) # 设置 config.set(‘section1‘, ‘k10‘, "123") config.write(open(‘ss.ini‘, ‘w‘))
12.hashlib模块
用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
import hashlib hash = hashlib.md5() hash.update(bytes(‘xiaoqian‘,encoding=‘utf-8‘)) print(hash.hexdigest()) #md5值 print(hash.digest())
13.subprocess模块
sucprocess.Popen()#上面各种方法的底层封装
run()方法
标准写法
subprocess.run([‘df‘,‘-h‘],stderr = subprocess.PIPE,stubprocess.PIPE,check = True)
涉及到管道|的命令需要这样写
shbprocess.run(‘df -h|grep disk1‘,shell = True)#shell = True的意思是这条命令直接交给系统去执行,不需要python负责解析。
Popen()方法
args:shell命令,可以是字符串或者序列类型
stdin, stdout,stderr:分别表示程序的标准输入、输出、错误句柄
preexec_fn:只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用
shell:同上
cwd:用于设置子进程的当前目录
env: 用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承
14.logging模块
logging的日志可以分为 debug(),info(),warning(),error()and critical()五个级别
简单用法·
import logging logging.warning("user[xiaoqian] attempted wrong passwold more than 3 time") logging.critical("server is down")
输出
WARNING:root:user[xiaoqian] attempted wrong passwold more than 3 time CRITICAL:root:server is down
import logging logging.basicConfig(filename=‘log_test.log‘, level=logging.DEBUG, format=‘%(asctime)s:%(levelname)s:%(filename)s:%(funcName)s:%(lineno)d:%(process)d %(message)s‘, datefmt=‘%Y-%m-%d %I:%M:%S %p‘) def sayhi(): logging.error("from sayhi....") sayhi() logging.debug(‘This message should go to the log file‘) logging.info(‘So should this‘) logging.warning(‘And this, too‘)
formatter 组件
import logging fh = logging.FileHandler("access.log") formatter = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘) fh.setFormatter(formatter)
15.re模块
联系方式
姓名 地区 身高 体重 电话 张三 北京 171 48 13651054608 李四 上海 169 46 13813234424 王五 深圳 173 50 13744234523 赵六 广州 172 52 15823423525 小七 北京 175 49 18623423421 老八 北京 170 48 18623423765
import re f = open("联系方式",‘r‘,encoding="utf-8") data = f.read() phones = re.findall("[0-9]{11}", data) print(phones)
‘*‘ 重复零次或更多次 ‘^‘匹配字符开头 ‘$‘匹配字符结尾 ‘*‘匹配*号前的字符0次或多次 ‘+‘ 重复一次或更多次 ‘?‘ 重复零次或一次 ‘{n}‘ 重复n次 ‘{n,m}‘ 重复n到m次 ‘|‘匹配|左或|右的字符 ‘(...)‘分组匹配 ‘\A‘只从字符开头匹配 ‘\Z‘匹配字符结尾,同$ ‘\d‘匹配数字0-9 ‘\D‘匹配非数字 ‘\w‘匹配[A-Za-z0-9] ‘\W‘匹配非[A-Za-z0-9] ‘\s‘匹配空白字符,\t, \n, \r ‘(?P<name>)‘ 分组匹配
re.match从头开始匹配 re.search匹配包含 re.findall把所有匹配到的字符放到以列表中的元素返回 re.split以匹配到字符当做列表分隔符 re.sub匹配字符并替换 re.fullmatch全部匹配
re.compile(pattern, flage = 0)
re.match(pattern, string,flage = 0)
pattern正则表达式 string 要匹配的字符 flags 标志位,用于控制正则表达式的匹配方式
obj = re.match(‘\d+‘,‘123abc‘) if obj: print(obj.group())
Flags标志符
re.|(re.IGNORECASE):忽略大小写 M(MULTILINE):多行模式,改变‘^’和‘$’的行为 S(DOTALL):改变‘.‘的行为 X(re.VERBOSE)可以给你的表达式,使其更可读
re.search(pattern,string,flags = 0)
import re obj = re.search(‘\d+‘,‘u123uu888asf‘) if obj: print(obj.group())
re.findall(pattern,string,flags = 0)
import re obj = re.findall(‘\d+‘,‘u123uu888asf‘) if obj: print(obj)
re.sub(pattern,repl,string,count = 0,flags = 0)
>>> re.sub(‘\d+‘,‘|‘,‘xaioqian123xiaobai33hhh555‘,count = 2) ‘xaioqian|xiaobai|hhh555‘
re.split(pattern,string,maxsplit = 0,flags = 0)
>>> s = ‘1-2*5/3+7/3*99/4*2998+10*514/44‘ >>> re.split(‘[\*\-\/\+]‘,s) [‘1‘, ‘2‘, ‘5‘, ‘3‘, ‘7‘, ‘3‘, ‘99‘, ‘4‘, ‘2998‘, ‘10‘, ‘514‘, ‘44‘] >>>
re.fullmatch(pattern,string,flags = 0)
re.fullmatch(‘\[email protected]\w\.(com|cn|edu)‘,"[email protected]")