Python计算文件中字符串的唯一出现次数

时间:2014-04-16 20:01:14

标签: python python-3.x

我正在尝试使用python 3.3.1计算Apache日志文件中的唯一IP地址 事情是我不认为它正在计算一切正确。

这是我的代码:

import argparse
import os
import sys
from collections import Counter

#
# This function counts the unique IP adresses in the logfile
#
def print_unique_ip(logfile):
    IPset = set()
    for line in logfile:
        head, sep, tail = line.partition(" ")
        if(len(head) > 1):
            IPset.update(head)

    print(len(IPset))
    return  

#
# This is the main function of the program
#
def main():
    parser = argparse.ArgumentParser(description="An appache log file processor")

    parser.add_argument('-l', '--log-file', help='This is the log file to work on', required=True)
    parser.add_argument('-n', help='Displays the number of unique IP adresses', action='store_true')
    parser.add_argument('-t', help='Displays top T IP adresses', type=int)
    parser.add_argument('-v', help='Displays the number of visits of a IP adress')

    arguments = parser.parse_args()

    if(os.path.isfile(arguments.log_file)):
        logfile = open(arguments.log_file)
    else:
        print('The file <', arguments.log_file, '> does not exist')
        sys.exit

    if(arguments.n == True):
        print_unique_ip(logfile)
    if(arguments.t):
        print_top_n_ip(arguments.t, logfile)
    if(arguments.v):
        number_of_ocurrences(arguments.v, logfile)

    return


if __name__ == '__main__':
  main()

我已经放弃了其他一切。

当我运行它时,我得到了

$ python3 assig4.py -l apache_short.log -n
12

但我知道文件中有超过12个唯一的IP

它似乎没有给我正确的结果。我想要做的是逐行读取文件,然后当我找到一个IP地址时,我将它放入一个集合,因为它只保存了唯一的元素,然后我打印出所述集合的长度。

1 个答案:

答案 0 :(得分:1)

IPset.update(head)

错误。这不符合您的预期。您想要将add每个IP设置为您的设置。示例使其更清晰:

>>> s1 = set()
>>> s2 = set()
>>> s1.add('11.22.33.44')
>>> s2.update('11.22.33.44')
>>> s1
set(['11.22.33.44'])
>>> s2
set(['1', '3', '2', '4', '.'])