Как извлечь первый IP-адрес из словарного ключа «Сообщение» и добавить новый ключ с именем «IP» с извлеченным IP-адресом? - PullRequest
0 голосов
/ 09 мая 2020

Итак, у меня есть список словарей, внутри которых я создал из файла журнала. Я хочу создать новый ключ под названием «IP» с извлеченным IP-адресом из «Message»

Это пример списка словарей.

[{'Date': 'Jun 29', 'Time': '03:22:22', 'PID': '13251', 'Message': 'Authentication failed from 163.27.187.39 (163.27.187.39): Permission denied in replay cache code', 'Access Type': 'Success'}
...
{'Date': 'Jun 29', 'Time': '03:22:22', 'PID': '13263', 'Message': 'connection from 61.74.96.178 () at Wed Jun 29 03:22:22 2005', 'Access Type': 'Success'}]

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

for Dict in data:
    for k,v in Dict.items():
        if k == 'Message':
            re.findall(r"[0-9]+(?:\.[0-9]+){3}\s", v)
            Dict["host/IP address"] = re.findall(r"[0-9]+(?:\.[0-9]+){3}\s", v)
        else:
            Dict["host/IP address"] = "" 
    print(Dict)

1 Ответ

1 голос
/ 09 мая 2020

Вам не нужно перебирать dict, поскольку вы знаете ключи, просто создайте новый из IP-адреса ключа Message.

  • Я удаляю \s в регулярном выражении, потому что вам не нужно пространство
  • r"[0-9]{1,3}(?:\.[0-9]{1,3}){3} лучше регулярное выражение, которое проверяет длину группы di git [1-3]
  • используйте [0] в конце, чтобы получить первый IP-адрес из Message, если вы хотите получить список всех найденных IP-адресов, удалите его

Если есть не IP, вы должны сначала вычислить IP-адреса, затем добавить сопоставление с результатом findall

for value in data:
    ips = re.findall(r"[0-9]{1,3}(?:\.[0-9]{1,3}){3}", value['Message'])
    if ips:
        value["host/IP address"] = ips[0]

Если вы хотите поместить пустую строку в случае отсутствия IP-адреса

for value in data:
    ips = re.findall(r"[0-9]{1,3}(?:\.[0-9]{1,3}){3}", value['Message'])
    value["host/IP address"] = ips[0] if ips else ""

  • с [0]: 'host/IP address': '163.27.187.39'

  • без [0]: 'host/IP address': ['163.27.187.39', '163.27.187.39']

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...