关于python:使用split和strip的最佳方式

Best way to use split and strip

我的函数会从服务器上获取命令,并沿着offset=1.3682的行输出一些东西,metrics_emit使用这些东西发送给我们的度量收集器/可视化工具datadog。

我需要做的是去掉offset=部分,因为metrics_emit只需要数值。剥离offset=以及在i上调用strip()的最佳方法是什么,以便消除所有新行和尾随/前导空格?

1
2
3
4
5
6
7
def check(self):
    output = sh.ntpq("-nc rv")
    out_list = output.split(",")
    for i in out_list:
        if"offset" in i:
            self.metrics_emit('ntp.offset', i)
            break


简单的方法是:

1
i.strip().split('offset=')[1]

例如:

1
2
def scrape(line):
    return line.strip().split('offset=')[1]

例子:

1
2
>>> scrape('offset=1.3682')
'1.3682'

如果需要转换输出,由您决定。


How to extract the numeric value appeared after offset=?

1
2
3
4
5
6
7
8
import re
regex = re.compile('offset=([\d+\.\d+]+)')
string = 'offset=1.3682'

match = re.search(regex, string)
if match:
    print(match.group(0)) # prints - offset=1.3682
    print(match.group(1)) # prints - 1.3682

为什么我更喜欢正则表达式?因为即使字符串包含其他关键字,正则表达式也会提取出现在offset=表达式之后的数值。例如,用我给出的示例检查以下情况。

1
2
string = 'welcome to offset=1.3682 Stackoverflow'
string = 'offset=abcd'

How to remove leading and trailing whitespace characters?

1
string.strip()

将删除所有前导和尾随空格字符,如、
、 、f、空格。

要获得更大的灵活性,请使用以下内容

  • 只删除前导空白字符:myString.lstrip()
  • 只删除尾随空格字符:myString.rstrip()
  • 删除特定的空白字符:myString.strip('
    ')
    myString.lstrip('

    ')或myString.rstrip('
    \t')
    等。

参考文献:见此答案。


用于删除空白字符的.strip()

用于删除该字符串的.replace('offset=', '')

你也应该能把它们拴起来。