Python 如何从字典密钥中提取第一个IP地址;讯息;并添加一个名为“的新键”;知识产权;使用提取的IP地址?

Python 如何从字典密钥中提取第一个IP地址;讯息;并添加一个名为“的新键”;知识产权;使用提取的IP地址?,python,regex,Python,Regex,所以我有一个字典列表,里面有我从日志文件生成的字典。我想用从“消息”中提取的IP地址创建一个名为“IP”的新密钥 这是字典列表的一个示例 [{'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':

所以我有一个字典列表,里面有我从日志文件生成的字典。我想用从“消息”中提取的IP地址创建一个名为“IP”的新密钥

这是字典列表的一个示例

[{'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'}]
我曾想过使用regex,但我得到一个错误,说我的字典在迭代过程中改变了大小

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)

您不需要迭代dict,因为您知道密钥,只需从key
Message
的IP创建一个新的

  • 我删除正则表达式中的
    \s
    ,因为您不需要空间
  • r“[0-9]{1,3}(?:\.[0-9]{1,3}{3}
    检查数字组长度的更好正则表达式
    [1-3]
  • 在最后使用
    [0]
    消息
    获取第一个IP,如果需要找到的所有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']


我似乎在说出列表索引时出错range@Aaron是否有一些没有IP的消息?是的,有一些没有IP的消息addresses@Aaron如果没有IP:不创建密钥“主机/IP地址”,或者如果字符串为空,则创建它和值?