python提取文本中name后的数值_使用python的re模块匹配文本里固定字符串并取出字符串后的数字...

这次遇到的问题是,我将数据(data)存在5个不同的文件夹下,这五个文件夹又在同一个文件夹下。

我想要可以给一个文件夹的输入,就可以便利此文件夹下的每一个文件夹里的data文件,并取出data中固定字符串后的一串数字。

data里内容看起来是这样:

error of kalman is 0.5546175255599425

error of sma is 0.5615765774353265

error of median is 0.5704280901194125

error of kalman + sma is 0.5435610429446063

需要要取出最后一行的error of kalman + sma is后的数字,则需要用到re库:

下面代码的第八行就是正则表达式,其中:

(?<=error of kalman \+ sma is)的意思是如果error of kalman + sma is出现在字符串前面才做匹配,称作正向后视断言。

其中加号前面需要加\,否则加号会被认为是正则表达式运算符。

\s*\d*\.\d*这句中\s是空格,\d是十进制数字,\.就是小数点。因为没有办法一次把这个小数取出来,所以需要把这个数分为三部分取。

*代表对它前面的正则式匹配0到任意次重复, 尽量多的匹配字符串。

1 importos2 importre3 #coding:utf8

4

5 dir_path='C:/Users/你的用户名/OneDrive/文档/thesis/plots/localization_result'

6

7 dirs=os.listdir(dir_path)8 p = re.compile(r'(?<=error of kalman \+ sma is)\s*\d*\.\d*')9

10 out =[]11 for dir indirs:12 file_dir = dir_path + '/' + dir + '/data'

13 with open(file_dir, encoding='utf-8') as file:14 for line infile.readlines():15 s =p.findall(line)16 ifs:17 out.append(eval(s[0]))18 print(dirs)19 print(out)

最后的结果是

['0252', '0514', '124', '133', '235']

[0.4874211675211633, 0.41016961492770837, 0.5435610429446063, 0.5860694118921476, 0.7477642384332055]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值