如有错漏,敬请指教~
一、目的
用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()
re.compile()是用来优化正则的,它将正则表达式转化为对象. compile(pattern, flags=0) pattern : 一个字符串形式的正则表达式 flags : 可选,表示匹配模式,比如忽略大小写,多行模式等 re.compile()生成的是正则对象,单独使用没有任何意义,需要和findall(), search(), match()搭配使用
pattern.findall()
re.compile()结合findall(),返回一个列表
三、实际例子
一个简单的例子
test_string='a\\kk\\\\cc'
print(test_string)
u=re.compile(r'\\\\')
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:\[([\d\d]+)+/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')]
|