Skip to main content
 首页 » 编程设计

python之在 Python 中解析巨大的日志文件

2025年05月04日9yyy_WW

我正在尝试解析一个巨大的日志文件(大约 5 GB)。

我只想解析前 500,000 行,不想将整个文件读入内存。

基本上,我想做下面代码正在做的事情,但是使用 while 循环而不是 for 循环和 if 条件.我还想确保不要将整个文件读入内存。

import re 
from collections import defaultdict 
FILE = open('logs.txt', 'r') 
count_words=defaultdict(int) 
import pickle 
i=0 
for line in FILE.readlines(): 
    if i < 500000: 
        m = re.search('key=([^&]*)', line) 
        count_words[m.group(1)]+=1 
    i+=1 
 
csv=[] 
for k, v in count_words.iteritems(): 
    csv.append(k+","+str(v)) 
print "\n".join(csv) 

请您参考如下方法:

替换

for line in FILE.readlines(): 

与

for line in FILE: 

避免将其全部读入内存。然后,只处理前 500000 行,做

from itertools import islice 
 
for line in islice(FILE, 500000): 
    m = re.search('key=([^&]*)', line) 
    count_words[m.group(1)] += 1 

这样您实际上只加载您正在使用的文件的前缀。 (您当前的程序实际上将遍历整个文件,无论它是否将文件完全加载到内存中。)

不需要带有 if 检查的 while 循环来解决这个问题。