Python фильтр строк, соответствующих клавиш - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть рабочий скрипт Python, выдающий следующий вывод.

import re
import sys
import socket
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn.connect(('10.10.10.10', 25001))
conn.send('status\n')
data = conn.recv(16777216)
conn.close()
print data

Вывод сценария

session 3594154272 xwf9VgJQfRSSPBCyXYVRzlw==foo xh_iUVQ6JRieFv70JjDVOnQ==bar 13584
stream 102.22.133.12:33562 173.24.54.19:39814 10.10.10.10:12838 39382628/29008576/68391204 
session 3363219694 xiXdeg8oGTQ6MYZ-Z5q4iKw==foo xVBsa0nlZT4-vOLA8P-WxSw==bar 2319
stream 71.22.223.192:43718 115.125.65.61:41126 10.10.10.10:12802 4243204/9624660/13867864
....
....
.... 

Теперь я хочу, чтобы в выводе была любая строка, начинающаяся с stream, поэтому я использую следующеелогика, но это не работает.

import re
import sys
import socket
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conn.connect(('10.10.10.10', 25001))
conn.send('status\n')
data = conn.recv(16777216)
conn.close()

# parse line contain stream
for line in data:
    if re.match(r'stream', line):
        print line,

1 Ответ

0 голосов
/ 19 февраля 2019

Ваш data является массивным string вместо list из strings, как вы ожидали.Также проще использовать str.startswith вместо регулярных выражений (меньше ресурсов).Просто измените свой код следующим образом:

# parse line contain stream
for n, line in enumerate(data.split('\n')):
    if line.startswith('stream '):
        print line

Где n - это общее количество строк в вашем data.Если вы только хотели посчитать, сколько раз вы встречались "stream":

count = 0
for line in data.split('\n'):
    if line.startswith('stream '):
        print line
        count += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...