Python 在日志文件中搜索给定的字符串IP地址
我正在做一个项目,搜索一个IP地址,看看它是否在日志文件中。我取得了一些良好的进展,但在处理以日志文件格式搜索某些项目时遇到了困难 以下是我所拥有的:Python 在日志文件中搜索给定的字符串IP地址,python,python-2.7,parsing,ip-address,logfile,Python,Python 2.7,Parsing,Ip Address,Logfile,我正在做一个项目,搜索一个IP地址,看看它是否在日志文件中。我取得了一些良好的进展,但在处理以日志文件格式搜索某些项目时遇到了困难 以下是我所拥有的: IP = raw_input('Enter IP Address:') with open ('RoutingTable.txt', 'r') as searchIP: for line in searchIP: if IP in line: ipArray = line.split()
IP = raw_input('Enter IP Address:')
with open ('RoutingTable.txt', 'r') as searchIP:
for line in searchIP:
if IP in line:
ipArray = line.split()
print ipArray
if IP == ipArray[0]:
print "Success"
else:
print "Fail"
正如您所看到的,这是非常糟糕的代码,但我对Python和编程是新手,所以我使用它来确保至少可以打开文件并将第一项与输入的字符串进行比较
她是一个示例文件内容(我的实际文件有数千个条目):
我想用一种方法将所有IP(只是IP而不是其他垃圾)存储在一个数组中,然后用一个循环遍历数组中的所有项目,并与用户定义的IP进行比较
例如,对于该行,所有关心的内容都是10.20.70.0/23
D EX 10.20.70.0/23 [170/3072] via 10.10.10.2, 6d06h, Vlan111
[170/3072] via 10.10.10.2, 6d06h, Vlan111
[170/3072] via 10.10.10.2, 6d06h, Vlan111
[170/3072] via 10.10.10.2, 6d06h, Vlan111
请帮忙
谢谢
达蒙
编辑:我正在挖掘设置标志,但这仅在某些情况下有效,因为您可以看到,所有线都不是以D开头的,但有些线以O(用于OSFP路由)和C(直接连接)开头
以下是我正在做的事情:
f = open("RoutingTable.txt")
Pr = False
for line in f.readlines():
if Pr: print line
if "EX" in line:
Pr = True
print line
if "[" in line:
Pr = False
f.close()
这给了我一个更清晰的结果,但仍然是整个产品线,而不仅仅是IP。您需要自己存储所有IP吗?您可以执行以下操作,将所有数据抓取到列表中,并检查输入字符串是否位于列表中:
your_file = 'RoutingTable.txt'
IP = input('Enter IP Address:')
with open(your_file, 'r') as f:
data = f.readlines()
for d in data:
if IP in d:
print 'success'
break
else:
print 'fail'
else
语句仅在您未break
时触发,即没有成功案例
如果您不能将所有内容读入内存,您可以像在文章中一样迭代每一行,但数千行应该很容易做到
编辑
您是否需要自己存储所有IP?您可以执行以下操作,将所有数据抓取到列表中,并检查输入字符串是否位于列表中:
your_file = 'RoutingTable.txt'
IP = input('Enter IP Address:')
with open(your_file, 'r') as f:
data = f.readlines()
for d in data:
if IP in d:
print 'success'
break
else:
print 'fail'
else
语句仅在您未break
时触发,即没有成功案例
如果您不能将所有内容读入内存,您可以像在文章中一样迭代每一行,但数千行应该很容易做到
编辑
首先,我想提到的是,您最初处理文件打开和关闭的方式(使用上下文管理器时,“with open(…)”部分)更好。它更干净,防止你忘记再次关闭它 其次,我个人会用正则表达式来处理这个问题。如果你知道你将得到相同的模式,从dex或O开始,然后是地址,然后是括号中的部分,正则表达式应该不会有太多的工作,它们绝对值得理解 这是一个很好的资源,可以大致了解它们: 不同的语言有不同的方式来解释模式。这里有一个关于python的链接(请记住导入re): 还有一个名为regexr的网站(我没有足够的声誉来建立另一个链接),你可以用它来搞乱上面的表达式,从而掌握它
总之,我个人会保留用于打开文件的初始上下文管理器,然后使用编辑中的readlines方法,并在其中使用正则表达式从行中取出地址,然后将得到的地址粘贴回列表中 首先,我想提一下,您最初处理文件打开和关闭的方式(在使用上下文管理器时,“with open(…)”部分)更好。它更干净,防止你忘记再次关闭它 其次,我个人会用正则表达式来处理这个问题。如果你知道你将得到相同的模式,从dex或O开始,然后是地址,然后是括号中的部分,正则表达式应该不会有太多的工作,它们绝对值得理解 这是一个很好的资源,可以大致了解它们: 不同的语言有不同的方式来解释模式。这里有一个关于python的链接(请记住导入re): 还有一个名为regexr的网站(我没有足够的声誉来建立另一个链接),你可以用它来搞乱上面的表达式,从而掌握它
总之,我个人会保留用于打开文件的初始上下文管理器,然后使用编辑中的readlines方法,并在其中使用正则表达式从行中取出地址,然后将得到的地址粘贴回列表中 这个工作非常好!!!请参阅下面我的帖子,了解我决定保存它们的原因。我的回复太长,无法发表评论,因此我将其作为回复发布。@Damon-Cool,我还添加了一个编辑,使用
re
模块保存所有IP地址。你应该为将来考虑一下。如果我的帖子回答了你原来的问题,请接受:)谢谢你的快速回复。。问题解决了,,,寻找我的新帖子来构建子网逻辑:)这非常有效!!!请参阅下面我的帖子,了解我决定保存它们的原因。我的回复太长,无法发表评论,因此我将其作为回复发布。@Damon-Cool,我还添加了一个编辑,使用re
模块保存所有IP地址。你应该为将来考虑一下。如果我的帖子回答了你原来的问题,请接受:)谢谢你的快速回复。。问题已解决,,,请查找我关于构建子网逻辑的新帖子:)严格来说,这里的问题是解析日志文件格式。我做了相应的标记并重新命名。如果您告诉我们更多关于日志文件格式的信息,它的名称/包/工具是什么,这可能会有所帮助?严格来说,这里的问题是解析日志文件格式。我做了相应的标记并重新命名。如果您告诉我们更多关于日志文件格式的信息,它的名称/包/工具是什么,这可能会有所帮助?