Я работаю над скриптом Python для просмотра двух файлов: один содержит список UUID, другой содержит большое количество записей журнала — каждая строка содержит один из UUID из другого файла. Цель программы состоит в том, чтобы создать список UUID из файла file1, а затем каждый раз, когда этот UUID будет найден в файле журнала, увеличивать связанное значение каждый раз, когда будет найдено совпадение.
Короче говоря, подсчитайте, сколько раз каждый UUID появляется в файле журнала. На данный момент у меня есть список, который заполнен UUID в качестве ключа и «попадания» в качестве значения. Затем еще один цикл, который перебирает каждую строку файла журнала и проверяет, соответствует ли UUID в журнале UUID в списке UUID. Если он совпадает, он увеличивает значение.
for i, logLine in enumerate(logHandle): #start matching UUID entries in log file to UUID from rulebase
if logFunc.progress(lineCount, logSize): #check progress
print logFunc.progress(lineCount, logSize) #print progress in 10% intervals
for uid in uidHits:
if logLine.count(uid) == 1: #for each UUID, check the current line of the log for a match in the UUID list
uidHits[uid] += 1 #if matched, increment the relevant value in the uidHits list
break #as we've already found the match, don't process the rest
lineCount += 1
Он работает как надо, но я уверен, что есть более эффективный способ обработки файла. Я просмотрел несколько руководств и обнаружил, что использование count быстрее, чем использование скомпилированного регулярного выражения. Я думал, что чтение файлов по частям, а не построчно, улучшит производительность за счет уменьшения времени дискового ввода-вывода, но разница в производительности для тестового файла ~ 200 МБ была незначительной. Если у кого-то есть другие способы, буду очень признателен :)