我实际上是在Python中创建一个日志文件解析程序。我遇到的问题是当我试图提取可变长度的东西时,例如IP地址。
FILE = importFile.readlines()
holderString = ''
cleanUp = []
for line in FILE:
holderString = line[51:63]
if holderString not in cleanUp:
cleanUp.append(holderString)
在我已经解析了日志文件并提取了包含我正在使用的关键字的行之后,这段代码就会运行。我真正想要的是能够从特定索引开始,在本例中是第51列,因为IP地址的开始是可预测的。虽然它结束了,但问题是什么。这是一个示例行:
[02] Mon 01Jan15 00:00:00 - (1234567) Connected to 192.168.1.1 (local address 10.10.10.10, port 80)
索引,日期,时间,短划线,会话ID和“已连接到”永远不会改变长度或位置,但连接的IP地址确实会改变,从而改变长度(例如:19.18.1.1(长度为9)或192.168.100.100(长度为15))。
我如何从特定指数开始并以特定角色结束?
答案 0 :(得分:2)
将索引51中的字符串剪切到最后,用空格分隔并使用第一个元素。
>>> line = "[02] Mon 01Jan15 00:00:00 - (1234567) Connected to 192.168.1.1 (local address 10.10.10.10, port 80)"
>>> line.split()[8]
'192.168.1.1'
你也可以在没有切片部分的情况下通过将整行分成空格并将第9个分割元素作为你的ip地址来实现:
>>> import re
>>> line = "[02] Mon 01Jan15 00:00:00 - (1234567) Connected to 192.168.1.1 (local address 10.10.10.10, port 80)"
>>> re.search(r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", line).group(0)
'192.168.1.1'
另一种方法是使用正则表达式搜索行中的IP地址:
<ul>
答案 1 :(得分:0)
听起来你应该使用正则表达式。 import re
并查看文档https://docs.python.org/2/library/re.html
以下匹配IP地址...
re.match(r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$",line)
答案 2 :(得分:0)
您可以使用识别IP地址的正则表达式,或者只使用
s="[02] Mon 01Jan15 00:00:00 - (1234567) Connected to 192.168.1.1 (local address 10.10.10.10, port 80)"
ip = s.split()[8]