python基础第十一天---正则化--os模块---sys模块

正则表达式概念

1是一种文本模式,这种模式描述了在搜索文本时,所要匹配的一个或者多个字符串
2即正则表达式本身就是一个字符串,由一些英文字符以及特殊字符(原字符)这种模式,来匹配一个或者多个内容。
3即可以来搜索匹配 我们想要的内容。
4正则表达式是一个字符串构成由字面值和元字符组成,一方面即平时看到的字面值:如字符,该是什么含义就是什么含义,即普通字符。元字符:/d /w,这些具有特殊含义的成为元字符。
5正则表达式中/具有转义的功能。
6字面值又分为普通字符和需要转义的字符。需要转义的字符:即要加个/,这样才能够表达原始含义。如普通字符c就是c。需要转义的字符有:如你想描述/,因为正则表达式中/具有转义的功能,所以要想真正就匹配/,即必须写两个即//,才能表示原始的一个斜杠/。否则只写一个/意思就变了,即不是斜杠了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

匹配规则

1正则表达式中的定义的元字符目的是匹配一些单字,如匹配一个数字一次可用/d .点可匹配所有的字符一次,除过换行/n以外。\D匹配所有非数字等同于[0-9],即代表取反。\w匹配所有大小写字母加数字加下划线。其他如下图所示:
在这里插入图片描述
2批量备选,yes|no代表2选1,即可以选择yes,也可以选择no
3若想匹配一定数量的字符。即量词如下图有:
其中匹配特定范围如{3,5}表示匹配3到5次之间。
在这里插入图片描述

在这里插入图片描述
4贪婪:指的是找的是满足条件的最大匹配结果,如下图将匹配出满足这个的最大的范围了。
在这里插入图片描述
5非贪婪,可以.*?

.*? #注意因为.匹配任意字符一次,加上*匹配字符变为多次,即量词,而?也是量词,所以此时这种形式定义为非贪婪模式,记住。

在这里插入图片描述
6边界匹配,如匹配行首,行尾等,如下:
在这里插入图片描述

正则用法(RegexObject)

1正则对象
在这里插入图片描述

#Python正则表达式即可以匹配ASCII码中的字符,也可以匹配unicode字符库中的所有字符
#Python中所用模块re
import  re
text='Tom is 8 years old . Mike is 25 years old.'
#两种方式,匹配所需字符串。
#方式1,通过将定义的模式即元字符这种模式先编译成一个中间的字节码结果,并存在一个变量如pattern中,
# 此时即有了模式对象pattern,这种方法目的是在重用这种模式匹配时可以提高效率,即多用于重复使用的场景。
#就可以先提前将模式编译成中间结果存储到一个变量中,之后即可以反复使用了。
pattern=re.compile('\d+')#匹配数字1次或多次  #pattern即为模式对象了。
pattern.findall(text)#即用编译好的模式pattern去字符串text中匹配出所有的满足匹配的结果出来。
print(pattern.findall(text)#测试结果:['8', '25']


#方式2
re .findall('\d+',text)#匹配模式,加去text对象中匹配,适用于临时查找一下满足要求的匹配结果。
尽管是字面值,但是在字面值中有一部分需要转义,包括\  $等都是需要转义才可以打印匹配出他自身。
#所以匹配\要写两个\\即前面的转义符,后边才是真正/,所以匹配//,即要用四个//了
import re
s='\\author:tom'
re.findall('\\\\author',s)
#结果['\\author']

#也可以加r忽略转义,即保持原字符,不要转义。如即也可以匹配到双//了
s1=re.compile(r'\\author')
s1.findall(s)
['\\author']

2 findall直观,返回满足的所有匹配结果放在一个列表中。

在这里插入图片描述

mport re
text='Tom is 8 years old . Mike is 25 years old.'
re.findall('[A-Z]\w+')#匹配A-Z范围内的一个字符,加字母或数字多次即\w+
re.findall('[A-Z]\w+',text)#匹配A-Z范围内的一个字符,加字母或数字多次即\w+
['Tom', 'Mike']

3
在这里插入图片描述
注:[]可选参数,如可以选起始匹配坐标索引包括在内,以及终止匹配坐标索引不包括。返回的是匹配对象。

#match默认必须从起始的字符串开始匹配,返回一个对象,若起始对应不上,就匹配不到。
#match默认从起始开始匹配
import  re
s='<html><head></head></html>'
pattern=re.compile(r'<html>') ##默认匹配原字符,不要转义加上r
pattern.match(s)#记住:返回为空不成功,若返回有个匹配对象,即匹配成功了。
<_sre.SRE_Match object; span=(0, 6), match='<html>'>
s=' <html><head></head></html>'
pattern.match(s,1)#指定从第二个字符匹配,不要从开始匹配。即索引为1
<_sre.SRE_Match object; span=(1, 7), match='<html>'>

4 search可以从任何位置去匹配,并将匹配到的结果返回。
在这里插入图片描述
注[]为可选参数,以逗号相隔。

s=' <html><head></head></html>'
pattern=re.compile(r'<html>')
pattern.search(s)#span,即起始从第一个字符匹配到了,到底7结束了。
<_sre.SRE_Match object; span=(1, 7), match='<html>'>

在这里插入图片描述
5返回的是一个包含匹配对象元素的迭代器
在这里插入图片描述
在这里插入图片描述
总结正则对象:
在这里插入图片描述

进一步观察MathObject对象的细节

可以通过match,search返回MathObject即匹配对象,可以对每个分组的细节进行观察。
在这里插入图片描述

以下这个满足这种模式的匹配结果只有一种,

text='Tom is 8 years old . jerry is 23 years old.'
pattern=re.compile(r'(\d+).*?(\d+)')#分两个组,中间可以出现任何字符0次或多次,这样可坑能会最大范围匹配,所以加上?表示非贪婪模式。#只有加了括号的才是分组,不加的不叫分组,如:.*?
#返回MathObject进一步分析各分组细节
m=pattern.search(text)
m
<_sre.SRE_Match object; span=(7, 32), match='8 years old . jerry is 23'>
m.group()#看各组的整体
'8 years old . jerry is 23'
m.group(0)#表示取整体
'8 years old . jerry is 23'
m.group(1)#找的是第一个分组
'8'
m.group(2)#找的是第二个分组的结果
'23'
m.start(1)#找第一个分组的下标索引。
7
m.start(2)#找第2个分组的下标索引。
30
 m.end(1)#找第一个分组的结束下标索引。
m.end(1)#找第一个分组的结束下标索引。
8
m.groups()#找到所有的内容返回一个元组
('8', '23')
m.groupdict()#返回为空的字典表,因为尽管定义了分组,但并没有为分组起名称。
{}

在这里插入图片描述

进一步观察Group编组对象

注:对于有编组即括号的匹配是匹配模式中包含括号与不包含括号的都匹配,但只返回括号中的结果。

1场景1,创建子正则应用量词。
在这里插入图片描述
在这里插入图片描述
2 场景2:限制备选项范围

import re
re.search(r'Center|re','Center')#可以匹配两者其一。即Center或re
<_sre.SRE_Match object; span=(0, 6), match='Center'>
re.search(r'Center|re','Centre')#可以匹配两者其一。即Center或re
<_sre.SRE_Match object; span=(4, 6), match='re'>
#此时只会匹配re,若想匹配因为英式的为Center,美式为Centre,可以通过分组指定备选
re.search(r'Cent(er|re)','Centre')#可以匹配两者其一。即Center或re
<_sre.SRE_Match object; span=(0, 6), match='Centre'>
re.search(r'Cent(er|re)','Center')#可以匹配两者其一。即此时为Center或Centre了
<_sre.SRE_Match object; span=(0, 6), match='Center'>

3场景3
在这里插入图片描述

#可以重现前面第一个编组,即r'(\w+) \1'注意中间有空格,且必须从1开始即\1
re.search(r'(\w+) \1','hello hello world')
<_sre.SRE_Match object; span=(0, 11), match='hello hello'>
re.search(r'(\w+) \1','hello hello  hello world')#只能重现两次,所以匹配的是前面的两个hello hello
<_sre.SRE_Match object; span=(0, 11), match='hello hello'>
re.search(r'(\w+) \1','hello hello  hello hello world')#索引为1只能匹配前面的两个hello hello
<_sre.SRE_Match object; span=(0, 11), match='hello hello'>

re.search(r'(\w+) (\w+) \2','hello hello hello hello world')
<_sre.SRE_Match object; span=(0, 17), match='hello hello hello'>
#注意索引\1是有一个分组即\1代表第一个分组,所以当只有一个分组时,只能是\1,不可以是\2,因为没有第二个分组。
上i面最后一个有两个分组,但\2是将第二个分组再现一次,,即可以了,因为有第二个分组存在,所以可以再现。

在这里插入图片描述
4声明分组,可以取名字几种方式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

正则综合应用

字符串

在这里插入图片描述
1切割
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2替换
在这里插入图片描述
在这里插入图片描述
注:中间作为一个整体的分组,匹配两个*之间的东西,且最小范围,即非贪婪所以加?
在这里插入图片描述
即定义的分组,在表现中可以引用了
在这里插入图片描述
在这里插入图片描述
可以替换字符串原有格式:如下图:
在这里插入图片描述

在这里插入图片描述

编译标记

在这里插入图片描述
1忽略大小写
在这里插入图片描述
2
在这里插入图片描述
总:
在这里插入图片描述

模式清除

在这里插入图片描述

逃逸函数,即可以抛开字符本来的含义

在这里插入图片描述
在这里插入图片描述

系统工具

如在mac操作系统有终端,如windows中有doc 或命令行工具来管理系统工具。在linux有shell脚本。
在这里插入图片描述

sys系统模块

1
在这里插入图片描述
2
在这里插入图片描述
platform看运行的操作系统如win32
version看版本信息
path看搜索路径,一般我们能在pycharm中调用自己模块或包,就是按这个路径自动找的,所以自动才运行了。
modules所载入的模块功能有哪些。

3 观察异常的具体信息。
在这里插入图片描述
在这里插入图片描述
可以只看回溯这个错误信息,即将索引变为2即可。
在这里插入图片描述
以上sys内容总结
在这里插入图片描述
4 sys.argv函数捕获并返回一个列表。
将在编辑器中写一个.py文件并保存。如图:
在这里插入图片描述
可以在windows命令中运行这个文件。
在这里插入图片描述
如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
发挥作用,让直接的捕获参数可以直接执行我文件中的逻辑功能,如加法add
在这里插入图片描述
运行示意图:
在这里插入图片描述
5 标准流
在这里插入图片描述
上面中的输入、输出与下边的sys下的操作一样。
在这里插入图片描述
sys.stdout()输出后面还加了输出字符的个数。
在这里插入图片描述
总结:
在这里插入图片描述

OS模块常用功能组件

1查看Python的环境变量,如在这可以看到Python安装的一些路径。
在这里插入图片描述
2看目录,管理目录工具
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3运行shell命令,如在windows中就是win+r+cmd运行命令符即可。
在这里插入图片描述
在这里插入图片描述
pycharm的terminal
在这里插入图片描述
当在Python中若用操作系统的组件可以导入os模块,如下图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
所以可以在Python环境中直接可以替代在操作系统即命令交互式提示符来完成的目录与文件管理了。
在这里插入图片描述

os.path工具

通过Python命令操作符完成,可以兼顾不同的操作系统。完成文件,路径等操作。
1文件操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2可移植工具
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3 OS下的模块专门有个Path模块处理路径
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据心机房是现代信息技术的核心设施,它承载着企业的重要数据和服务,因此,其基础设计与规划至关重要。在制定这样的方案时,需要考虑的因素繁多,包括但不限于以下几点: 1. **容量规划**:必须根据业务需求预测未来几年的数据处理和存储需求,合理规划机房的规模和设备容量。这涉及到服务器的数量、存储设备的容量以及网络带宽的需求等。 2. **电力供应**:数据心是能源消耗大户,因此电力供应设计是关键。要考虑不间断电源(UPS)、备用发电机的容量,以及高效节能的电力分配系统,确保电力的稳定供应并降低能耗。 3. **冷却系统**:由于设备密集运行,散热问题不容忽视。合理的空调布局和冷却系统设计可以有效控制机房温度,避免设备过热引发故障。 4. **物理安全**:包括防火、防盗、防震、防潮等措施。需要设计防火分区、安装烟雾探测和自动灭火系统,设置访问控制系统,确保只有授权人员能进入。 5. **网络架构**:规划高速、稳定、冗余的网络架构,考虑使用光纤、以太网等技术,构建层次化网络,保证数据传输的高效性和安全性。 6. **运维管理**:设计易于管理和维护的IT基础设施,例如模块化设计便于扩展,集监控系统可以实时查看设备状态,及时发现并解决问题。 7. **绿色数据心**:随着环保意识的提升,绿色数据心成为趋势。采用节能设备,利用自然冷源,以及优化能源管理策略,实现低能耗和低碳排放。 8. **灾难恢复**:考虑备份和恢复策略,建立异地灾备心,确保在主数据心发生故障时,业务能够快速恢复。 9. **法规遵从**:需遵循国家和地区的相关法律法规,如信息安全、数据保护和环境保护等,确保数据心的合法运营。 10. **扩展性**:设计时应考虑到未来的业务发展和技术进步,保证机房有充足的扩展空间和升级能力。 技术创新在数据心机房基础设计及规划方案扮演了重要角色。例如,采用虚拟化技术可以提高硬件资源利用率,软件定义网络(SDN)提供更灵活的网络管理,人工智能和机器学习则有助于优化能源管理和故障预测。 总结来说,一个完整且高效的数据心机房设计及规划方案,不仅需要满足当前的技术需求和业务目标,还需要具备前瞻性和可持续性,以适应快速变化的IT环境和未来可能的技术革新。同时,也要注重经济效益,平衡投资成本与长期运营成本,实现数据心的高效、安全和绿色运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值