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
我对 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