python - 使用 RegEx 逐行遍历日志文件以查找 IP 地址模式。每个 IP 都需要使用 extend 方法将每个 ip 添加到列表 IPS
问题描述
我正在编写一个脚本并尝试使用正则表达式逐行遍历日志文件以查找 IP 地址模式,然后使用扩展方法将每个 ip 添加到列表 ips 中。正如您在脚本中看到的那样,我相信在迭代之前我已经做好了一切,然后尝试打印(ips)。
import urllib.request
import json
import datetime
import os
import re
import azuremaps
我创建了 3 个空列表来存储找到的数据
ips = []
unique_ips = []
toJson = []
我打开的日志文件 file = open('logs/access.log', 'r')
这可能是我搞砸了尝试使用正则表达式逐行遍历日志文件以获取 ip 地址,然后使用扩展方法将它们存储在列表 ips 中的地方。希望此代码少于 5 行。
pattern = re.compiler(r'(\d{1,3}\.\d{1,3}\.\d{1,3} \.\d{1,3})')
for line in file:
ips.extend(pattern.search(line)[0])
print(ips)
新列表填充删除所有重复。
unique_ips = list(set(ips))
在我继续之前,我需要验证我的列表,但是当我在终端中键入 print(ips) 时,我得到 bash:syntax error near unexpected token 'ips'
#print(ips)
#print(len(ips))
#print(len(unique_ips))
#print(unique_ips)
解决方案
有什么理由逐行进行吗?
假设 access.log 文件为:
43.53.250.2
65.66.66.69
noise234.85.98.12something
whatever65.66.66.69
我想你可以试试这个:
import re
with open('logs/access.log', 'r') as file:
file = file.read()
pattern = re.compile(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')
ips = pattern.findall(file)
unique_ips = list(set(ips))
print(unique_ips)
['234.85.98.12', '65.66.66.69', '43.53.250.2']
关于您的代码的注释:
- 我相信它应该是 re.compile 而不是 re.compiler
- 看起来你的正则表达式字符串中有一个额外的空间
- 我认为您可以使用
append
,因为无论如何您一次尝试extend
使用一个元素来列出您的列表。
推荐阅读
- python - 本地 IP 没有响应,而 localhost 和 127.0.0.1 有。在 Window 10 机器上用 Python 开发 REST 服务
- r - 从 Anova 表中选取平方和,在 R 中保留变量名称
- selenium - Selenium chrome 驱动程序无法建立安全连接
- java - 在斯坦福 CoreNLP 中使用 NERClassifierCombiner 时出现 NullPointer 异常
- python - 如何在我的 MDDataTable 列表中删除我的字符串
- java - 从原生 Java 回调到 Unity 的 C# 脚本高延迟
- google-colaboratory - 如何清空 colab 上的磁盘?
- javascript - 如何在 firebase 中形成动态 where 查询?
- python - tensorflow.python.framework.errors_impl.InvalidArgumentError:未知的图像文件格式。需要 JPEG、PNG、GIF、BMP 之一
- c++ - 尝试将广度优先搜索方法写入图形时出现分段错误