[Python学习日记-53] Python 中的正则表达式模块 —— re

[Python学习日记-53] Python 中的正则表达式模块 —— re

简介

re 模块

练习

简介

        我们在编程的时候经常会遇到想在一段文字当中找出电话号码、身份证号、身高、年龄之类的信息,就像下面的数据一样

# 文件名:美丽学姐联系方式.txt

姓名        地区        身高        体重        电话

马纤羽        深圳        173        50        13744234523
乔亦菲        广州        172        52        15823423525
罗梦竹        北京        175        49        18623423421
柳如烟        北京        170        48        18623423765
岳妮妮        深圳        177        54        18835324553
贺婉萱        深圳        174        52        18933434452
叶梓萱        上海        171        49        18042432324

        那我们现在需要取出里面的所有手机号,你能想到的办法是什么?应该是下面这一种吧

f = open("美丽学姐联系方式.txt","r",encoding="utf-8")phones = []for line in f:name,city,height,weight,phone = line.split()if phone.startswith("1") and len(phone) == 11:phones.append(phone)print(phones)

代码输出如下:

        从输出来看这的确是达到了我们想要的效果了,但是我们却为了这个小功能写下了相对复杂的代码,有没有更简单的方式呢?手机号是有规则的,都是数字且是11位,而且都是1开头的,如果能把这样的规则写成代码,直接拿规则代码匹配文件内容不就行了?而这种玩法就叫做正则表达式!

import ref = open("美丽学姐联系方式.txt","r",encoding="utf-8")phone_line = re.findall("[0-9]{11}",f.read())
print(phone_line)

代码输出如下:

re 模块

        正则表达式就是字符串的匹配规则,在多数编程语言里都有相应的支持,Python 里对应的模块就是 re 模块。

一、Flags 标志符

注:括号内是完整写法

  • re.I(re.IGNORECASE):忽略大小写
  • re.M(re.MULTILINE):多行模式,改变“^”和“$”的行为
  • re.S(re.DOTALL):改变“.”的行为,使“.”能匹配上换行符(\n)
  • re.X(re.VERBOSE):可以给你的表达式写注释,使其更可读,下面两个代码是一样的
import rea = re.compile(r"""\d + # the integral part\. # the decimal point\d * # some fractional digits""",re.X)
b = re.compile(r"\d+\.\d*")  # 不一定要加r,可以把\变成\\print(a.findall("172.16.11.11"))
print(b.findall("172.16.11.11"))

代码输出如下:

二、匹配语法

1、re.match

        从头开始匹配从起始位置开始根据正则表达式去字符串中匹配指定内容,只进行一次匹配,语法如下

re.match(pattern,string,flags=0)

参数说明:

  • pattern:正则表达式
  • string:要匹配的字符串
  • flags:标志位,用于控制正则表达式的匹配方式

演示代码如下

import reobj = re.match('\\d+','123uuas133f')    # 如果能匹配到就返回一个可调用的对象,否则返回Noneif obj:print(obj.group())

代码输出如下:

2、re.search

        根据正则表达式去字符串中匹配指定包含的内容,只进行一次匹配,语法如下

re.search(pattern,string,flags=0)

参数说明:

  • pattern:正则表达式
  • string:要匹配的字符串
  • flags:标志位,用于控制正则表达式的匹配方式

演示代码如下 

import reobj = re.search('\\d+','u321uu888asf')if obj:print(obj.group())

代码输出如下:

3、re.findall

        match() 和 search() 均用于匹配单值(只能匹配字符串中的一个),如果想要匹配到字符串中所有符合条件的元素,则需要使用 findall()(把所有匹配到的字符放到列表中,并以列表的形式返回),语法如下

re.findall(pattern,string,flags=0)

参数说明:

  • pattern:正则表达式
  • string:要匹配的字符串
  • flags:标志位,用于控制正则表达式的匹配方式

演示代码如下  

import reobj = re.findall('\\d+','fa123uu888asf')
print(obj)

代码输出如下:

4、re.split

        用匹配到的值做为分割点,把字符串分割成列表,语法如下

re.split(pattern,string,maxsplit=0,flags=0)

参数说明:

  • pattern:正则表达式
  • string:要匹配的字符串
  • maxsplit:最大分割数
  • flags:标志位,用于控制正则表达式的匹配方式

演示代码如下  

import reprint(re.split("[0-9]", "askm3kms4msjmn6nkna8lna"))  # 以匹配到的字符作为分隔符
print(re.split("\\d", "askm3kms44msjmn6nkna8lna"))s = '9-2*5/3+7/3*99/4*2998+10*568/14'
print(re.split(r"[-+*/]", s))
print(re.split(r"[-+*/]", s,3))

代码输出如下:

5、re.sub

        用于替换匹配的字符串,比 str.replace() 功能更加强大,语法如下

re.sub(pattern, repl, string, count=0, flags=0)

参数说明:

  • pattern:正则表达式
  • repl:替换为该字符
  • string:要匹配的字符串
  • count:要替换的次数
  • flags:标志位,用于控制正则表达式的匹配方式

演示代码如下 

import reprint(re.sub('[a-z]+','handsome',"我是abc123"))
print(re.sub('\\d+','|','alex22wupeiqi33o1dboy55',count=2))

代码输出如下:

6、re.fullmatch

        把整个字符串匹配成功就返回一个 re 对象,否则返回None,语法如下

re.fullmatch(pattern,string,flags=0)

参数说明:

  • pattern:正则表达式
  • string:要匹配的字符串
  • flags:标志位,用于控制正则表达式的匹配方式
import reprint(re.fullmatch('\\w+@\\w+\\.(com|cn|edu)','jove@csdn.cn'))

代码输出如下:

7、re.compile

        提前将正则表达式模式编译成一个正则表达式对象的函数,该对象可以使用 match()、search() 等其他方法进行匹配,这样的好处是什么呢?要知道之所以正则表达式可以实现这些功能是因为他在执行的时候都会生成一个相应功能的函数,当结束的时候就会释放它,但是如果这里有成百上亿条数据需要使用同样的正则表达式处理,那么生成函数这个动作就要做非常多次,这样再强的 CPU 也会吃不消的,这样我们使用 compile() 提前编译好,然后保存下来,然后调用就可以节省非常多的资源了,语法如下

re.compile(pattern, flags=0)

参数说明:

  • pattern:正则表达式
  • flags:标志位,用于控制正则表达式的匹配方式

演示代码如下 

import re# 假设现在要处理1亿个身份证信息
ids = ["4406821992010216521","4406821987020217521","4406821956030215731","4406821999042814691"]    # 假设列表中存了1亿个身份证信息
result = {}    # 用于存储处理后的结果prog = re.compile("(?P<province>[0-9]{3})(?P<city>[0-9]{3})(?P<birthday>[0-9]{8})(?P<small_man>[0-9X]{5})")for i in ids:# 循环了1亿次result[i] = prog.search(i).groupdict()print(result)

代码输出如下:

{

'4406821992010216521':

        {'province': '440', 'city': '682', 'birthday': '19920102', 'small_man': '16521'},

'4406821987020217521':

        {'province': '440', 'city': '682', 'birthday': '19870202', 'small_man': '17521'},

'4406821956030215731':

        {'province': '440', 'city': '682', 'birthday': '19560302', 'small_man': '15731'},

'4406821999042814691':

        {'province': '440', 'city': '682', 'birthday': '19990428', 'small_man': '14691'}

}

三、常用的表达式规则

1、总表

符号说明
.默认匹配除 \n 之外的任意一个字符,若指定 flag DOTALL,则匹配任意字符,包括换行
^匹配字符开头,若指定 flags MULTILINE,这种也可以匹配上 (r"^a","\nabc\neee",flags=re.MULTILINE),取反,re.search(r'[^()]',1(2)) 这里会输出1
$匹配字符结尾, 若指定 flags MULTILINE,re.search('foo.$','foo1\nfoo2\n',re.MULTILINE).group() 会匹配到 foo1
*匹配 * 号前的字符0次或多次, re.search('a*','aaaabac') 结果'aaaa'
+匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果 ['ab', 'abb']
?匹配前一个字符1次或0次,re.search('b?','jove').group() 匹配 b 0次
{m}匹配前一个字符 m 次,re.search('b{3}','jovebbbs').group() 匹配到'bbb'
{n,m}匹配前一个字符 n 到 m 次,re.findall("ab{1,3}","abb abc abbcbbb") 结果 ['abb', 'ab', 'abb']
|匹配 | 左或 | 右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC'
(...)分组匹配, re.search("(abc){2}a(123|45)", "abcabca456c").group() 结果'abcabca45'
[...]匹配中括号中限定的字符集
\A只从字符开头匹配,re.search("\Aabc","joveabc") 是匹配不到的,相当于 re.match('abc',"joveabc") 或 ^
\Z匹配字符结尾,同 $ 
\d匹配数字 0-9
\D匹配非数字
\w匹配 [A-Za-z0-9]
\W匹配非 [A-Za-z0-9]
\s匹配空白字符、\t、\n、\r,re.search("\s+","ab\tc1\n3").group() 结果'\t'
(?P<name>...)分组匹配 re.search("(?P<province>[0-9]{3})(?P<city>[0-9]{3})(?P<birthday>[0-9]{8})(?P<small_man>[0-9X]{5})",id_num).groupdict()),结果是个字典

2、.

演示代码如下

import reprint(re.search(".ou", "zou").group())  # '.'默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行;使用 group() 能直接输出匹配到的字符
print(re.search(".", "\n"))

代码输出如下:

3、^

演示代码如下

import reprint(re.search("^jove", "jovemalsmlmalm0").group())  # '^'以什么什么开头
print(re.search("^jove", "0jovejovejovejovejove"))

代码输出如下:

4、$

演示代码如下

import reprint(re.search("jove$", "0jovejovejovejovejove").group())  # '$'以什么什么结尾
print(re.search("^jove$", "jove"))  # '^$'这样组合就相当于把开头和结尾定死了
print(re.search("jove$", "0jovejovejovejovejove0"))

代码输出如下:

5、*

演示代码如下

import reprint(re.search("a*", "aaaaaaabbbabbb"))  # 匹配*号前的字符0次或多次
print(re.search("a*", "bbbabbb"))  # 从头开始匹配如果开头不是a的话就直接返''
print(re.search("a*", "bbbbbbbb"))  # 就算没有一个a的会返回''

代码输出如下:

6、+

演示代码如下

import reprint(re.search("(ab)+", "bbbababb").group())  # 匹配+号前的字符1次或多次 ab+相当于a匹配一次,b匹配多次
print(re.search("a+", "bbbbbbb"))

代码输出如下:

7、?

演示代码如下

import reprint(re.search('a?', "aaaabbbbbbbb"))  # 匹配?号前的字符1次或0次,一定要在开头
print(re.search("a?", "bbbbaqsssss"))  # 返回''

代码输出如下:

8、{m}

演示代码如下

import reprint(re.search("a{3}", "bbbbbaaaabbbb"))  # 匹配前一个字符m次
print(re.search("a{3}", "bbbbbbbbb"))

代码输出如下:

9、{n,m}

演示代码如下

import reprint(re.search("a{3,5}", "bbbbaaaabbbbb"))  # 匹配3-5次,少了或多了就会返回None

代码输出如下:

10、|

演示代码如下

import reprint(re.search("abc|ABC", "ABCBabcCD"))  # 匹配abc或ABC 返回第一个找到的值
print(re.search("abc|ABC", "cbaBCbcCD"))  # 没有则返回None

代码输出如下:

11、(...)

演示代码如下

import reprint(re.search("(abc){2}a(123|45)", "abcabca123456"))  # 分组匹配 (abc){2}a(123|45) --> 两个abc a 123或45
print(re.search("(abc){2}a(123|45)", "aaaa"))  # 没有则返回None

代码输出如下:

12、[...]

演示代码如下

import reprint(re.findall("[0-9]{11}","张小姐,联系方式:13744234523"))

代码输出如下:

13、\A

演示代码如下

import reprint(re.search("\Aabc", "abcasdq"))  # 从头开始匹配,相当于re.match()
print(re.search("\Aabc", "aabcasdq"))

代码输出如下:

        在输出当中我们可以看到来自 Python 的一个警告:SyntaxWarning: invalid escape sequence '\A',而且我们所需的输出也是能正常显示的,我们先来看看这个警告是什么意思。

        SyntaxWarning: invalid escape sequence 是 Python 中语法警告的一种类型,它表示在字符串中使用了无效的转义序列(escape sequence)。在 Python 中,转义序列以反斜杠(\)开头,并用于表示特殊字符,例如换行符(\n)、制表符(\t)等。但有的时候反斜杠后面跟着的字符不一定是有效的转义序列,在上面的代码中,字符串"\Aabc"中的反斜杠(\)被视为转义序列的开始,然而在这种情况下,它并不是有效的转义序列。因此,出现了 SyntaxWarning: invalid escape sequence 警告。

        而我们应该如何解决该问题呢?我们只需要在反斜杠(\)前再加多一个反斜杠就可以消除该警告了,代码如下

import reprint(re.search("\\Aabc", "abcasdq"))  # 从头开始匹配,相当于re.match()
print(re.search("\\Aabc", "aabcasdq"))

代码输出如下:

14、\Z

演示代码如下

import reprint(re.search("\\Aabc\\Z", "abc"))  # \Z是匹配结尾的 \Aabc\Z相当于 ^anc$

代码输出如下:

15、\d

演示代码如下

import reprint(re.search("\\d{3}", "aJk8m643KN26H"))  # 匹配连续三个的数字
print(re.search("\\d+", "aJk8m643KN26H"))  # 匹配一个或多个数字

代码输出如下:

16、\D

演示代码如下

import reprint(re.search("\\D+", "aJk8m643KN26H"))  # 匹配一个或者多个非数字
print(re.findall("\\D+", "aJk8m643KN26H"))  # 所有非数字的匹配到都放到列表哪里
print(re.findall("\\D", "aJk8m643KN26H"))  # 所有非数字的匹配到都放到列表哪里

代码输出如下:

17、\w

演示代码如下

import reprint(re.search("[a-zA-Z0-9]", "H"))  # [a-zA-Z0-9] 代表字母大小写和数字都可以匹配到
print(re.search("[a-zA-Z]", "A"))
print(re.search("[a-z]", "A"))
print(re.search("[a-zA-Z0-9]{7}", "aJk8m64KN26H"))  # 匹配多次print(re.findall("\\w+", "aJk)8m6=43KN-26H"))  # 所有[a-zA-Z0-9]的匹配到都放到列表哪里

代码输出如下:

18、\W

演示代码如下

import reprint(re.findall("\\W+", "aJk)8m6=43KN-26H"))  # 所有非[a-zA-Z0-9]的匹配到都放到列表哪里

代码输出如下:

19、\s

演示代码如下

import reprint(re.findall("\\s", "aJk)8\n\tm6=43\rKN-2\t6H"))

代码输出如下:

20、(?P<name>...)

演示代码如下

import reid_num = "440682198702041121X"
print(re.findall("([0-9]{3})([0-9]{3})([0-9]{4})([0-9]{4})([0-9X]{5})", id_num))
print(re.search("([0-9]{3})([0-9]{3})([0-9]{4})([0-9]{4})([0-9X]{5})", id_num).groups())  # 分组匹配groups() --> 出来是个元组
print(re.search("(?P<province>[0-9]{3})(?P<city>[0-9]{3})(?P<birthday>[0-9]{8})(?P<small_man>[0-9X]{5})",id_num).groupdict())  # 分组匹配groupdict() --> 出来是个字典

代码输出如下:

        到这里,常用的正则表达式已经介绍完了,不过这只是正则表达式的冰山一角。单单是正则表达式的各种规则就可以写一本四百多页的书出来,如果还想了解更多请留言或者私信我来进行交流。    

练习

一、题目

1、验证手机号是否合法

2、验证邮箱是否合法

3、开发一个简单的 Python 计算器,实现加减乘除及括号优先级解析

  • 用户输入 1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2)) 等类似公式
  • 必须自己解析里面的 ()、+、-、*、/ 符号和公式(不能调用 eval 等类似功能实现)
  • 运算后得出结果,结果必须与真实的计算器所得出的结果一致

提示:

re.search(r'\([^()]+\)',s).group()        # 可拿到最里层的括号中的值

二、答案

1、验证手机号是否合法

import rewhile True:phone_number = input("Please input you phone number:")if re.search("^1[0-9]{10}",phone_number) is not None:print("ok,this is true number...")breakelse:print("sorry,this is bad number...\nplease retry input new phone number...")

2、验证邮箱是否合法

import rewhile True:mail = input("Please input you email:")if re.search("\\w+[@]\\w+\\.(com|cn|edu)", mail) is not None:print("ok,this is true email...")breakelse:print("sorry,this is bad email...\nplease retry input new email...")

3、开发一个简单的 Python 计算器,实现加减乘除及拓号优先级解析

import rebracket = re.compile(r'\([^()]+\)')  # 寻找最内层括号规则
mul = re.compile(r'(\d+\.?\d*\*-\d+\.?\d*)|(\d+\.?\d*\*\d+\.?\d*)')  # 寻找乘法运算规则
div = re.compile(r'(\d+\.?\d*/-\d+\.?\d*)|(\d+\.?\d*/\d+\.?\d*)')  # 寻找除法运算规则
add = re.compile(r'(-?\d+\.?\d*\+-\d+\.?\d*)|(-?\d+\.?\d*\+\d+\.?\d*)')  # 寻找加法运算规则
sub = re.compile(r'(-?\d+\.?\d*--\d+\.?\d*)|(-?\d+\.?\d*-\d+\.?\d*)')  # 寻找减法运算规则
c_f = re.compile(r'\(?\+?-?\d+\)?')  # 检查括号内是否运算完毕规则
strip = re.compile(r'[^(].*[^)]')  # 脱括号规则def Mul(s):"""计算表达式中的乘法运算"""exp = re.split(r'\*', mul.search(s).group())return s.replace(mul.search(s).group(), str(float(exp[0]) * float(exp[1])))def Div(s):"""计算表达式中的除法运算"""exp = re.split(r'/', div.search(s).group())return s.replace(div.search(s).group(), str(float(exp[0]) / float(exp[1])))def Add(s):"""计算表达式中的加法运算"""exp = re.split(r'\+', add.search(s).group())return s.replace(add.search(s).group(), str(float(exp[0]) + float(exp[1])))def Sub(s):"""计算表达式中的减法运算"""exp = sub.search(s).group()if exp.startswith('-'):                 #如果表达式形如:-2.2-1.2;需变换为:-(2.2+1.2)exp = exp.replace('-', '+')         #将-号替换为+号;+2.2+1.2res = Add(exp).replace('+', '-')    #调用Add运算,将返回值+3.4变为-3.4else:exp = re.split(r'-', exp)res = str(float(exp[0]) - float(exp[1]))return s.replace(sub.search(s).group(), res)def calc():while True:s = input('Please input the expression(q for quit):')  # 例:'1+2- (3*  4-3/2+ (   3-2*(3+  5 -3*  -0.2-3.3*2.2 -8.5/ 2.4 )+10) +10)'if s == 'q':breakelse:s = ''.join([x for x in re.split('\\s+', s)])  # 将表达式按空格分割并重组if not s.startswith('('):  # 若用户输入的表达式首尾无括号,则统一格式化为:(表达式)s = str('(%s)' % s)while bracket.search(s):  # 若表达式s存在括号s = s.replace('--', '+')  # 检查表达式,并将--运算替换为+运算s_search = bracket.search(s).group()  # 将最内层括号及其内容赋给变量s_searchif div.search(s_search):  # 若除法运算存在(必须放在乘法之前)s = s.replace(s_search, Div(s_search))  # 执行除法运算并将结果替换原表达式elif mul.search(s_search):  # 若乘法运算存在s = s.replace(s_search, Mul(s_search))  # 执行乘法运算并将结果替换原表达式elif sub.search(s_search):  # 若减法运算存在(必须放在加法之前)s = s.replace(s_search, Sub(s_search))  # 执行减法运算并将结果替换原表达式elif add.search(s_search):  # 若加法运算存在s = s.replace(s_search, Add(s_search))  # 执行加法运算并将结果替换原表达式elif c_f.search(s_search):  # 若括号内无任何运算(类似(-2.32)除外)s = s.replace(s_search, strip.search(s_search).group())  # 将括号脱掉,例:(-2.32)---> -2.32print('The answer is: %.2f' % (float(s)))if __name__ == '__main__':calc()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/57598.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序美团点餐

引言&#xff1a;外卖已经成为了都市人的必备&#xff0c;在无数个来不及&#xff08;懒得&#xff09;做饭的时刻拯救孤单寂寞的胃。美团外卖无疑是外卖届的领头羊&#xff0c;它的很多功能与设计都值得我们学习。本文将从五个方面&#xff0c;对美团外卖展开产品分析&#xf…

【ArcGIS Pro实操第4期】绘制三维地图

【ArcGIS Pro实操第4期】绘制三维地图 ArcGIS Pro绘制三维地图-以DEM高程为例参考 如何使用ArcGIS Pro将栅格数据用三维的形式进行表达&#xff1f;在ArcGIS里可以使用ArcScene来实现&#xff0c;ArcGIS Pro实现原理跟ArcScene一致。由于Esri未来将不再对ArcGIS更新&#xff0c…

深入浅出神经网络:从基础原理到高级应用

第5章 神经网络 更加详细内容可以看这篇文章 5.1 神经元模型 神经网络的基本单元是神经元模型。神经元模拟了生物神经元的行为&#xff0c;通过接收输入信号&#xff0c;进行加权求和&#xff0c;然后经过激活函数输出结果。 数学上&#xff0c;一个简单的神经元可以表示为&…

pipeline开发笔记

pipeline开发笔记 jenkins常用插件Build Authorization Token Root配置GitLab的webhooks(钩子)配置构建触发器--示例 piblish over sshBlue OceanWorkspace Cleanup PluginGit插件PipelineLocalization: Chinese (Simplified) --中文显示Build Environment Plugin 显示构建过程…

ArcGIS 10.8 安装教程

目录 一、ArcGIS10.8二、安装链接三、安装教程四、ArcGIS实战 &#xff08;一&#xff09;ArcGIS10.8 1. 概述 ArcGIS 10.8是由美国Esri公司开发的GIS平台&#xff0c;用于处理、分析、显示和管理地理数据&#xff0c;并实现数据共享。它具有新特性和功能&#xff0c;性能更…

iOS MPNowPlayingInfoCenter 通知栏、锁屏 显示当前播放的媒体信息

前言 MPNowPlayingInfoCenter 是 iOS 框架 MediaPlayer 中的一个类&#xff0c;主要用于管理锁屏界面、控制中心、通知中心中显示的“当前播放”媒体信息。它允许开发者向用户展示正在播放的音乐或媒体信息&#xff0c;并控制媒体播放。 通过 MPNowPlayingInfoCenter&#xf…

新电脑Win11家庭中文版跳过联网激活方法(教程)

预装Win11家庭中文版的新电脑&#xff0c;如何跳过联网激活&#xff1b;由于微软限制必须要联网激活&#xff0c;需要使用已有的微软账户登入或者注册新的微软账户后才可以继续开机使用&#xff0c;Win11联网后系统会自动激活。下面介绍一下初次开机初始化电脑时如何跳过联网激…

猫咪掉毛还容易应激,哪款宠物空气净化器可以吸毛且低噪?

今年的双十一第一波优惠我没有抢&#xff0c;因为我在犹豫我真的必须要买宠物空气净化器&#xff0c;但是会不会有很多副作用等等问题&#xff0c;让我一直不敢下手。 一直犹豫买不买是因为我家养了一只爱掉毛的小猫咪&#xff0c;家里每天都是想着要清理猫咪掉下来的猫毛&…

又是一年 1024

今天是 1024 程序员节&#xff0c;现在是一名大数据讲师&#xff0c;我和往常一样&#xff0c;依旧在讲课中度过。对于很多程序员来说&#xff0c;这一天也许是属于代码、调试和无数行 SQL 查询的&#xff0c;而对于我来说&#xff0c;虽然工作内容不同&#xff0c;却也和数据、…

软考算法——线性表、栈和队列、串、数组、矩阵和广义表

软考算法&#xff08;一&#xff09; 线性表定义顺序表单链表循环链表双向链表 性能分析线性表插入删除操作 栈和队列栈队列循环队列 串、数组、矩阵和广义表串串的基本操作串的存储结构 数组数组的存储地址计算 矩阵——稀疏矩阵上三角矩阵下三角矩阵 广义表 线性表 定义 线性…

设置K8s管理节点异常容忍时间

说明 每个节点上的 kubelet 需要定时向 apiserver 上报当前节点状态&#xff0c;如果两者间网络异常导致心跳终端&#xff0c;kube-controller-manager 中的 NodeController 会将该节点标记为 Unknown 或 Unhealthy&#xff0c;持续一段时间异常状态后 kube-controller-manage…

软考——计算机网络概论

文章目录 &#x1f550;计算机网络分类1️⃣通信子网和资源子网2️⃣网络拓扑结构3️⃣ 计算机网络分类3&#xff1a;LAN MAN WAN4️⃣其他分类方式 &#x1f551;OSI 和 TCP/IP 参考模型1️⃣OSI2️⃣TCP/IP&#x1f534;TCP/IP 参考模型对应协议 3️⃣OSI 和 TCP/IP 模型对应…

AUTOSAR_EXP_ARAComAPI的6章笔记(4)

☞返回总目录 相关总结&#xff1a;《AUTOSAR 自适应应用中原始数据流传输的使用方法》总结 6.4 原始数据流传输的使用方法 本章描述了原始数据流&#xff08;RawDataStreams&#xff09;在 AUTOSAR 自适应应用程序中的使用方法。 目前&#xff0c;原始数据流传输在单播 / …

WSL2-轻量级AI训练场景最佳生产环境

WSL2 只适用于 Win 10 、Win11 在运行 AI 软件、AI 模型训练&#xff0c;Linux 是最佳的操作系统。 在运行各种软件&#xff0c;如&#xff1a;Stable Diffusion Web UI 等&#xff0c;使用 Docker 容器运行也更方便后期的快速复用&#xff0c;同样的 Docker 容器在 Linux 中…

基于springboot的网上服装商城推荐系统的设计与实现

基于springboot的网上服装商城推荐系统的设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;idea 源码获取&#xf…

安灯系统助力汽车零部件工厂快速解决生产异常

在汽车零部件制造领域&#xff0c;高效的生产管理和快速解决异常情况是确保产品质量和生产进度的关键。而安灯系统的应用&#xff0c;正为汽车零部件工厂带来了全新的变革&#xff0c;助力其快速解决生产异常。 汽车零部件工厂的生产报工产线看板直观地反映出生产的各项关键数据…

基于SpringBoot的“心灵治愈交流平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“心灵治愈交流平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能界面图 登录、用户注册界面图 心灵专…

【有啥问啥】智能座舱中的儿童遗留检测(CPD,Child Presence Detection)技术详解

智能座舱中的儿童遗留检测&#xff08;CPD&#xff0c;Child Presence Detection&#xff09;技术详解 引言 儿童遗留检测&#xff08;CPD&#xff0c;Child Presence Detection&#xff09;系统是一项旨在保护儿童免受因被遗忘在车内而导致的热中暑危险的重要安全技术。近年…

HCIP-HarmonyOS Application Developer 习题(十五)

&#xff08;判断&#xff09;1、在HarmonyOs中发布带权限公共事件&#xff0c;发布者首先要在config.json中申请所需的权限。 答案&#xff1a;正确 分析&#xff1a;发布携带权限的公共事件&#xff1a;构造CommonEventPublishInfo对象&#xff0c;设置订阅者的权限。 &#…

书生营 L0G4000 玩转HF/魔搭/魔乐社区

模型下载 在codespace上给环境装包&#xff0c;按照教材即可 运行后下载成功 建立下载json文件 新建下载internlm2_5-chat-1_8b的json文件 运行结果 基本上没啥问题&#xff0c;照着教程来就行 模型上传&#xff08;可选&#xff09; push的时候需要先认证token 最后的…