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



我是Python编程的新手,我正在创建一个Apache日志解析器。我发现了一个来自"导入集合"的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)

这似乎不符合逻辑。

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

最新更新