Python 如何在 Apache 日志文件中使用 Counter() 函数?

Python how to use Counter() function with Apache Log Files?

我对 Python 编程还很陌生,我正在创建一个 Apache 日志解析器。我从 'import collections' 中找到了一个 Counter 函数。我正在尝试减少行数,因为目前我正在这样计算我的 IP 出现次数:

if sort == 'ip':
    ip_count = []
    for match in ip_list:
        count = 0
        for ip_match in ip:
            if match == ip_match:
                count += 1
        ip_count.append(count)

我的字节是这样的:

 if desired_output == 'bytes':
            cnt_bytes = []
            for v in range(len(ip_list)):
                tmp = 0
                for k in range(len(ip)):
                    if ip_list[v] == ip[k]:
                        if bytes[k] == '-':
                            bytes[k] = 0
                        tmp += int(bytes[k])
                cnt_bytes.append(tmp)

它看起来不像 pythonic。

ip_list[] 是唯一 IP 地址的列表。 ip_count[] 存储每个 IP 地址的计数。

有没有办法用 Counter() 函数减少这些代码行?

您可以使用 Counter:

from collections import Counter

with open('access.log') as fp:
    ips = []
    for row in fp:
        ips.append(row.split(maxsplit=1)[0])
counter = Counter(ips)

defaultdict:

from collections import defaultdict

with open('access.log') as fp:
    counter = defaultdict(int)
    for row in fp:
        counter[row.split(maxsplit=1)[0]] += 1