所以我正在尝试python程序,它将从存储在文本文件中的Web服务器ping中提取往返时间。所以我基本上有一个文本文件:
PING e11699.b.akamaiedge.net (104.100.153.112) 56(84) bytes of data.
64 bytes from a104-100-153-112.deploy.static.akamaitechnologies.com (104.100.153.112): icmp_seq=1 ttl=60 time=17.2ms
64 bytes from a104-100-153-112.deploy.static.akamaitechnologies.com (104.100.153.112): icmp_seq=2 ttl=60 time=12.6ms
64 bytes from a104-100-153-112.deploy.static.akamaitechnologies.com (104.100.153.112): icmp_seq=3 ttl=60 time=11.7ms
... (a bunch more ping responses here)
--- e11699.b.akamaiedge.net ping statistics ---
86400 packets transmitted, 86377 received, 0% packet loss, time 86532481ms
rtt min/avg/max/mdev = 6.281/18.045/1854.971/28.152 ms, pipe 2
我是python的新手,需要帮助才能使用正则表达式命令仅提取" time ="之间的时间。和" ms"并将其发送到另一个文本文件,如下所示:
11.7
12.6
17.2
...
非常感谢任何帮助!
答案 0 :(得分:5)
grep -oP 'ttl=\d+\s+time=\K[\d\.]+' file
17.2
12.6
11.7
搜索SO或/和谷歌在纯python 中使用此正则表达式非常简单。
因为我还是要玩python:
(在bash shell中):
python2 <<< $'import re\nf = open("/tmp/file", "r")\nfor textline in f.readlines():\n\tmatches = re.finditer("ttl=\d+\s+time=([\d\.]+)ms", textline)\n\tresults = [float(match.group(1).strip()) for match in matches if len(match.group(1).strip())]\n\tif results:\n\t\tprint results[0]\nf.close()\n'
答案 1 :(得分:1)
因为你要求使用Python,所以它是:
$ ping -c 4 8.8.8.8 | python -c 'import sys;[ sys.stdout.write(l.split("=")[-1]+"\n") for l in sys.stdin if "time=" in l]'
10.5 ms
9.22 ms
9.37 ms
9.71 ms
注意,这有stdout缓冲,因此您可能想要添加sys.stdout.flush()
。随意将其从一个班轮转换为剧本
答案 2 :(得分:0)
您指定数据已存在于文本文件中。因此,假设您的文本文件名为data.txt
#we will be using the regular expression library for this example
import re
#open the "data.txt" (named data_file in a scope)
with open("data.txt") as data_file:
#read the text from the data_file into ping_data
ping_data = data_file.read()
found_data = re.findall('time=(.*)ms', ping_data)
with open('found.txt', 'w') as found_file:
for pattern in found_data:
found_file.write(pattern+"\n")
此填充输出名为found.txt
的文件,其中包含以下内容:
17.2
12.6
11.7
在示例中,我们只打开您的data.txt文件。然后从中读取数据。然后查找将返回您要查找的数据的正则表达式模式的所有匹配项。
time=(.*)ms
表示*字母time=
和ms
之间的任意大小的字符串
然后在我们找到patern后,我们只需将其写入另一个名为found.txt
的文件中,一次写一行直到完成。