Невозможно удалить пробелы из элементов списка - PullRequest
0 голосов
/ 09 июля 2020

Прошу вас помочь мне в этом, я не могу удалить пробелы из элементов списка, которые показывают ненужные пробелы. Не могли бы вы помочь мне удалить его.

Мне нужно получить строки с ip 1.1.1.1/32 и 3.3.3.3/32 в начале и получить все элементы в списке.

Я пробовал то же самое с помощью регулярного выражения, пробелы удалены, но я не могу получить последний элемент di git из таблицы.

Пожалуйста, предоставьте решение для того же:

import re
from io import StringIO

output = """
---------------------------------------------------------------------------
                  |           Up              |         Down              |
  Net     Prefix  |---------------------------+---------------------------
                  |       ASR        |  L     |       A          | Label  |
------------------+------------------+--------+------------------+---------
        1.1.1.1/32|  162.148.102.2:0 |     102|         -        |    -   |
     10.10.40.0/24|  162.148.102.2:0 |     101|         -        |    -   |
        1.1.1.1/32|  162.148.102.2:0 |     100|         -        |    -   |
        3.3.3.3/32|         -        |    -   |  162.148.102.2:0 |     103|
  192.158.104.0/24|         -        |    -   |  162.148.102.2:0 |     105|
        2.2.2.2/32|         -        |    -   |  162.148.102.2:0 |     106|
     10.30.50.0/24|         -        |    -   |  162.148.102.2:0 |     107|

---------------------------------------------------------------------------
"""



a = "1.1.1.1/32"
b = "3.3.3.3/32"
output  = StringIO (output)

i = 0
j = 0
for line in output.read().split('\n'):
    if b in line:
        tempa_i = line.strip().split('|')
        res_i = [ele for ele in tempa_i if ele.strip(' ')]
        i = i+1
    if a in line:
        tempb_j = re.findall(r'(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})',line)
        j = j+1

print (i)
print (j)

for list_ in range (i):
    print((res_i))
for list_ in range (j):
    print(tempb_j)

Наблюдаемый результат:

['3.3.3.3/32', '         -        ', '    -   ', '  162.148.102.2:0 ', '     103']
['1.1.1.1', '162.148.102.2']
['1.1.1.1', '162.148.102.2']

Ожидаемый результат:

['3.3.3.3/32', '-', '-', '162.148.102.2:0', '103']
['1.1.1.1/32', '162.148.102.2:0', '102', '-', '-']
['1.1.1.1/32', '162.148.102.2:0', '100', '-', '-']

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Вот рабочее решение, вы можете заказать список по своему усмотрению. Примечание: только python 2.

from io import StringIO

output = """
---------------------------------------------------------------------------
                  |           Up              |         Down              |
  Net     Prefix  |---------------------------+---------------------------
                  |       ASR        |  L     |       A          | Label  |
------------------+------------------+--------+------------------+---------
        1.1.1.1/32|  162.148.102.2:0 |     102|         -        |    -   |
     10.10.40.0/24|  162.148.102.2:0 |     101|         -        |    -   |
        1.1.1.1/32|  162.148.102.2:0 |     100|         -        |    -   |
        3.3.3.3/32|         -        |    -   |  162.148.102.2:0 |     103|
  192.158.104.0/24|         -        |    -   |  162.148.102.2:0 |     105|
        2.2.2.2/32|         -        |    -   |  162.148.102.2:0 |     106|
     10.30.50.0/24|         -        |    -   |  162.148.102.2:0 |     107|

---------------------------------------------------------------------------
"""



a = "1.1.1.1/32"
b = "3.3.3.3/32"
output  = StringIO(output.decode('utf-8'))

for line in output.read().split('\n'):
    if b in line:
      items = line.encode('utf-8').split('|')
      tempa_i = [i.strip() for i in items if i]
      print(tempa_i)

    if a in line:
      items = line.encode('utf-8').split('|')
      tempa_j = [i.strip() for i in items if i]
      print(tempa_j)


# THIS PRINTS:

# ['1.1.1.1/32', '162.148.102.2:0', '102', '-', '-']
# ['1.1.1.1/32', '162.148.102.2:0', '100', '-', '-']
# ['3.3.3.3/32', '-', '-', '162.148.102.2:0', '103']
1 голос
/ 09 июля 2020

Вы можете использовать понимание списка и метод str.strip() для удаления всех пробелов по сторонам всех строк в списке:

lst = [...]
lst = [s.strip() for s in lst]

Если вы хотите удалить все пробелы в строках, а не только по бокам, вы можете использовать str.replace():

lst = [...]
lst = [s.replace(' ','') for s in lst]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...