Python 截取关键字后的字符串

文件的内容格式如下:
“<2018-09-19 15:09:54,159> (Thread-2) [INFO ] (PressureListener.java:25) - bond38,cost:1
<2018-09-19 15:09:54,159> (Thread-2) [INFO ] (PressureListener.java:25) - bond55,cost:2
<2018-09-19 15:09:54,159> (Thread-2) [INFO ] (PressureListener.java:25) - bond1,cost:1
<2018-09-19 15:09:54,159> (Thread-2) [INFO ] (PressureListener.java:25) - bond43,cost:4
<2018-09-19 15:09:54,159> (Thread-2) [INFO ] (PressureListener.java:25) - bond73,cost:5
<2018-09-19 15:09:54,159> (Thread-2) [INFO ] (PressureListener.java:25) - bond12,cost:9”
需要计算“cost”后面值的平均值,以及文件中的最大值和最小值,如何写Python?

使用json模块就可以了


import jsons = '{"hd":"1557","uid":"19995","name":"Pc"}'a = json.loads(s)print('uid:',a['uid'])

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-10-31
用python split()方法

list1="<2018-09-19 15:09:54,159> (Thread-2) [INFO ] (PressureListener.java:25) - bond38,cost:1"
cost1= list1.split("cost:")[1]
print(cost1)
值:1
用一个循环就可以取到所有cost的值了,转换成int类型,就可以计算均值了
第2个回答  2020-02-15
用强大的正则表达式啊,如下:
import re
text = '''
<2018-09-19 15:09:54,159> (Thread-2) [INFO ] (PressureListener.java:25) - bond38,cost:1
<2018-09-19 15:09:54,159> (Thread-2) [INFO ] (PressureListener.java:25) - bond55,cost:2
<2018-09-19 15:09:54,159> (Thread-2) [INFO ] (PressureListener.java:25) - bond1,cost:1
<2018-09-19 15:09:54,159> (Thread-2) [INFO ] (PressureListener.java:25) - bond43,cost:4
<2018-09-19 15:09:54,159> (Thread-2) [INFO ] (PressureListener.java:25) - bond73,cost:5
<2018-09-19 15:09:54,159> (Thread-2) [INFO ] (PressureListener.java:25) - bond12,cost:9
'''

num = re.findall(r'.*cost:(\d)',text)
cont = 0
for i in range(0,len(num)):
cont = cont + int(num[i])
print('平均值:',cont/len(num))
print('最大值:',max(num))
print('最小值:',min(num))

执行结果为:
平均值: 3.6666666666666665
最大值: 9
最小值: 1

另外,也可以用split曲线救国,如下:
text2 = text.split('\n')
for i in text2:
num = re.match(r'.+cost:(\d)',i)
print(num.group(1))
得到的结果是每个cost后面的数字,
1
2
1
4
5
9
接下来就不用我说了吧!!哈哈