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