如有错漏,敬请指教~
一、目的用log文件记录了信息格式如下:
Epoch:[27/50] train accuracy=0.93079 train loss=0.20142 test accuracy=0.89019 test_loss=0.38094
想把当前epoch数,还有accuracy和loss的值都取出来
二、用到的模块和函数简介 re模块:import re
re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有的语言都通用。
re.compile()是用来优化正则的,它将正则表达式转化为对象.
compile(pattern, flags=0)
pattern : 一个字符串形式的正则表达式
flags : 可选,表示匹配模式,比如忽略大小写,多行模式等
re.compile()生成的是正则对象,单独使用没有任何意义,需要和findall(), search(), match()搭配使用
re.compile()结合findall(),返回一个列表
三、实际例子一个简单的例子
test_string='a\kk\cc' print(test_string) #输出akk\cc,python对字符需要转义 #每次输入地址也要加转义字符 # 加一个r【r是原始字符的简写:raw string】,就表示废掉python中''的转义能力。 u=re.compile(r'\') #等价于re.compile('\\') #可以这么理解:现在添加的r限制了引号的''没有转义能力,但是python存储时必须在文本''前添加转义字符'',所以存储的形式为re.compile('\\') # .findall:返回string中所有与pattern匹配的全部字符串,返回形式为数组。 z=u.findall(test_string) print(z)#['\'] print(str(*z)) #\
为完成第一部分的目的,代码如下:
test_string3='Epoch:[27/50] train accuracy=0.93079 train loss=0.20142 test accuracy=0.89019 test_loss=0.38094' pattern = re.compile(r'Epoch:[([dd]+)+/50] train accuracy=([d.]+) train loss=([d.]+) test accuracy=([d.]+) test_loss=([d.]+)') z=pattern.findall(test_string3)
其中pattern和z 存储的值分别如下:
pattern=re.compile('Epoch:\[([\d\d]+)+/50\]t train accuracy=([\d\.]+)t train loss=([\d\.]+)t test accuracy=([\d\.]+)t test_loss=([\d\.]+)') z=[('27', '0.93079', '0.20142', '0.89019', '0.38094')]
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)