如何从字典中的键 "消息 "中提取第一个IP地址,然后用提取的IP地址添加一个名为 "IP "的新键?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从字典中的键 "消息 "中提取第一个IP地址,然后用提取的IP地址添加一个名为 "IP "的新键?相关的知识,希望对你有一定的参考价值。
所以我有一个列表,里面有我从日志文件生成的字典。我想用从 "消息 "中提取的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)
答案
你不需要遍历字典,因为你知道钥匙,只要从钥匙的IP创建新的钥匙就可以了 Message
.
- 我去掉...
\s
中,因为你不希望在regex中出现空格。 r"[0-9]{1,3}(?:\.[0-9]{1,3}){3}
更好的检查数字组长度的regex。[1-3]
- 使用
[0]
最后从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']
以上是关于如何从字典中的键 "消息 "中提取第一个IP地址,然后用提取的IP地址添加一个名为 "IP "的新键?的主要内容,如果未能解决你的问题,请参考以下文章