【问题标题】:Python Checking the beginning of a line for an ip addressPython检查IP地址的行首
【发布时间】:2020-11-25 17:49:32
【问题描述】:

基本上,我要做的是在标准输出消息进入时检查它们的 IP 地址。如果有一个 IP 地址,那么整行将被添加到列表中,以便稍后采取进一步行动。 stdout 消息的格式如下所示,虽然 ip 地址明显不同。

"192.168.1.1 17Dec2020 string more-strings more-strings"

我想做这样的事情:

for line in stdout.readlines():
    if line.split()[0] is an ip address:
        list.append(line)

如果第一个拆分不包含 IP 地址,则应忽略它并继续下一行。

我所有的东西都在工作我只是想在上面添加“if 语句”以减少我必须使用的一些行。如果可能的话,我宁愿避免使用正则表达式,但如果有必要,我当然可以走这条路。

【问题讨论】:

  • 你需要使用正则表达式。无需拆分输入,您只需在输入中搜索正则表达式模式。
  • @El。谢谢你,我害怕那个。我让它与正则表达式一起工作,但希望有更好的方法来做到这一点,而不必通过正则表达式运行每一行。我进行拆分的原因是因为如果在任何其他行中有一个 ip 但在开始时没有,那么这些行与我正在做的事情无关,我只想使用具有 IP 的行从我正在编写的脚本开始。
  • 您想避免使用正则表达式的原因是什么?如果您先编译它,则检查该行的开销非常低。您可以检查一堆特征,例如找到 3 个句点并在句点上拆分 line.split()[0] 并检查您得到的数字是否低于 255 等,但这并不优于正则表达式......跨度>

标签: python split ip-address


【解决方案1】:

仅适用于 Python3:

import ipaddress

a_list = []
for line in stdout.readlines():
    try:
        ipaddress.IPv4Network(line.split()[0])
        a_list.append(line)
    except AddressValueError:
        pass

【讨论】:

  • list 是一个错误的变量名,因为它会隐藏一个内置函数(而且它目前尚未定义)
  • 感谢您的评价
猜你喜欢
  • 1970-01-01
  • 2012-08-03
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
  • 2013-08-22
  • 2016-01-24
  • 2012-11-01
  • 1970-01-01
相关资源
最近更新 更多