如何使用python从日志文件中的ip地址列表中获取唯一的ip地址?
我有一个文本文件格式的日志文件。日志文件的格式如下所示如何使用python从日志文件中的ip地址列表中获取唯一的ip地址?,python,ip-address,Python,Ip Address,我有一个文本文件格式的日志文件。日志文件的格式如下所示 220.227.40.118 - - [06/Mar/2012:00:00:00 -0800] "GET /mysidebars/newtab.html HTTP/1.1" 404 0 - - 220.227.40.118 - - [06/Mar/2012:00:00:00 -0800] "GET /hrefadd.xml HTTP/1.1" 204 214 - - 59.95.13.217 - - [06/Mar/2012:00:00
220.227.40.118 - - [06/Mar/2012:00:00:00 -0800] "GET /mysidebars/newtab.html
HTTP/1.1" 404 0 - -
220.227.40.118 - - [06/Mar/2012:00:00:00 -0800] "GET /hrefadd.xml HTTP/1.1"
204 214 - -
59.95.13.217 - - [06/Mar/2012:00:00:00 -0800] "GET /dbupdates2.xml HTTP/1.1"
404 0 - -
111.92.9.222 - - [06/Mar/2012:00:00:00 -0800] "GET /mysidebars/newtab.html
HTTP/1.1" 404 0 - -
120.56.236.46 - - [06/Mar/2012:00:00:00 -0800] "GET /hrefadd.xml HTTP/1.1"
204 214 - -
49.138.106.21 - - [06/Mar/2012:00:00:00 -0800] "GET /add.txt HTTP/1.1" 204
214 - -
117.195.185.130 - - [06/Mar/2012:00:00:00 -0800] "GET
/mysidebars/newtab.html HTTP/1.1" 404 0 - -
122.160.166.220 - - [06/Mar/2012:00:00:00 -0800] "GET
/mysidebars/newtab.html HTTP/1.1" 404 0 - -
117.214.20.28 - - [06/Mar/2012:00:00:00 -0800] "GET /welcome.html HTTP/1.1"
204 212 - -
117.18.231.5 - - [06/Mar/2012:00:00:00 -0800] "GET /mysidebars/newtab.html
HTTP/1.1" 404 0 - -
我想使用python查找日志文件中存在的每个唯一ip地址。如何:
def get_ips(logfile):
with open(logfile, 'r') as f:
for line in f.readlines():
yield line.split()[0]
def main():
for ip in set(get_ips('log.txt')):
print ip
if __name__ == '__main__':
main()
以下是方法:
def unique_ips():
f = open('log_file.txt','r')
ips = set()
for line in f:
ip = line.split()[0]
ips.add(ip)
return ips
if __name__=='__main__':
print unique_ips()
这在
Python2.6上应该可以很好地工作
当perl-lane“print$F[0]除非$seen{$F[0]}时,为什么还要用python呢++'logfile1 logfile2 logfile3
已经为您完成了任务吗?@tchrist,应该扩展为answer@tchrist但是我的要求是python。既然$sort-uk1,1
已经完成了工作,为什么还要使用perl?@Raju.allen,您使用的是哪一版本的python?您可以对f:中的行使用。这样做更好,因为它避免了一次将整个文件读入内存once@Raju.allen,该代码在Python2.6中应该可以正常工作。您是否复制/粘贴或重新键入了它?ip不在ips中
如果有许多不同的ip地址,则速度会非常慢ips
应该是一个集合现在您可以只写ips=set(line.split()[0]表示f中的行)
split()[0]
如果有任何空行也会中断。虽然我知道也可以这样做,但这不是关于在此处保存行。我想说得更清楚些。ips=set(如果不是line.isspace(),那么f中的line的line.split()[0])
会更好,Hanks和@gnibbler,工作正常。我在日志文件中有243607个IP。输出连续显示,因此我无法检查输出。我想每一个ip都打印在一行。因为我是python新手,所以无法理解它。有什么办法吗?