如何使用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新手,所以无法理解它。有什么办法吗?