Python:在文件的一行文本中查找负数

时间:2015-06-04 14:41:08

标签: python

我有一个程序,每分钟轮询服务器当前的Wi-Fi状态,并将该信息保存到.txt文件。输出是:

*****当前WIFI信号强度*****:链路质量= 57/70信号电平= -53 dBm

文本文件包含许多这些行。我想要完成的是: - 找到所有行中的信号dBm值,并将它们附加到数组中,这样我就可以执行其他功能,例如sort和average。我似乎无法让它正常工作。

有谁知道怎么做?

谢谢!

3 个答案:

答案 0 :(得分:2)

我将浏览文件中的每一行并将行拆分为=,然后获取最后一个值,将其拆分为空格,然后获取将产生-53的第一个值。

strengthValues = []
f = open("input.txt", "r")
fileLines = f.readlines()
for line in fileLines:
    lineSplit = line.split('=')
    strengthValues.append(lineSplit[-1].split()[0])
print strengthValues

或列表理解:

f = open("test.txt", "r")
fileLines = f.readlines()
strengthValues = [line.split('=')[-1].split()[0] for line in fileLines]
print strengthValues

答案 1 :(得分:2)

signal_levels = []

try:
    with open("file.txt") as fh:
        lines = fh.readlines()
except IOError as err:
    # error handling

然后您可以使用re模块:

for line in lines:
     matches = re.search(r'Signal level=(-?[0-9]+) dBm$', line)
     if matches is None:
         # possible error handling
     signal_levels.append(int(matches.group(1)))

或没有它(灵感来自heinst's answer):

for line in lines:
    try:
        value = int(line.split('=')[-1].split()[0])
        signal_levels.append(value)
    except ValueError as err:
        # possible error handling

答案 2 :(得分:1)

假设信号电平是任何一行上的唯一负数,您可以使用带有findall函数的正则表达式来搜索文件中的所有负数并将它们作为字符串列表返回(基于MC93的回答)。

import re
f_in = open("input.txt", "r")
signal_levels = re.findall("-\d+", f_in.read())

或者,您可以获得列表推导的整数列表。

signal_levels = [int(n) for n in re.findall("-\d+", f_in.read())]