擅长:python、mysql、java
<p>使用<a href="https://docs.python.org/3/library/re.html#re.findall" rel="nofollow noreferrer">re.findall</a>查找一行上所有匹配的延迟,将它们转换为float并计算平均值:</p>
<pre><code>import re
# some sample data
data = [
"7 54.239.43.176 (54.239.43.176) 22.007 ms 54.240.229.173 (54.240.229.173) 27.092 ms 54.239.42.188 (54.239.42.188) 34.865 ms",
"8 * * *"
]
re_delay = re.compile(r'\d+\.\d{3}(?= ms)')
for line in data:
delays = [float(delay) for delay in re_delay.findall(line)]
if delays:
mean = sum(delays)/len(delays)
print(mean)
# 27.988
</code></pre>
<p>注意,应该使用<code>\d+</code>,就像我在这里做的那样,而不是<code>\d\d</code>作为延迟的整数部分,否则任何大于100ms的延迟都不会匹配。你知道吗</p>
<hr/>
<p>编辑以回答评论中的问题:</p>
<p>您还可以建立一个方法列表:</p>
<pre><code>re_delay = re.compile(r'\d+\.\d{3}(?= ms)')
out = []
for line in data:
delays = [float(delay) for delay in re_delay.findall(line)]
if delays:
mean = sum(delays)/len(delays)
out.append(mean)
</code></pre>
<p>并使用</p>
<pre><code>print(out[-1])
</code></pre>