Я ищу эффективный способ сканирования огромного файла журнала на предмет определенных строк и создания счетчика для каждой найденной строки. Я хочу написать этот метод, чтобы его можно было легко расширить в будущем. Я изучил defaultdict(int), но нашел только примеры для подсчета всех слов в строке. существовать
Чтобы усложнить задачу, я хочу использовать метод dict Key:[List], где Key будет строкой поиска и одним из списка, поэтому я могу добавить некоторые учетные данные к каждому ключу, чтобы я мог это сделать позже, поэтому что его можно легко расширить без необходимости внесения изменений в сценарий. существовать
Нравиться. . . существовать
mycounterdict = {'Mondeo':['Total Fords', 0, 'Belgium'], 'Passat':['Total VWs',0, 'Germany'], 'A4':['Total Audis', 0, 'Germany']}
Приложение, которое я использую для чтения журналов, структурировано таким образом, что сценарию передаются полные «группы данных» (в данном случае «CARinfo», хотя они перемешаны с другими «группами данных»). существовать
Пример визуализации типичного журнала (примечание: пунктирными линиями очерчен блок текста, передаваемый в скрипт каждый раз при обнаружении «CARinfo»). существовать
^{pr2}$
Затем мой сценарий сначала искал бы в большом журнале данных совпадение с группой данных «CARinfo», а затем искал совпадение по ключу в любом месте группы данных. Если я найду соответствующий ключ (например, mondeo), я хочу увеличить значение dict[1] (запись списка[1])
Я хотел бы сделать что-то подобное, но мне интересно, нужно ли мне полностью переосмыслить этот подход, который вначале был простым, но теперь кажется слишком сложным! существовать
path = C:\apath
for root, subFolders, files in os.walk(path):
for filename in files:
if filename.endswith('.log'):
filenameext = filename.split(".log")
f = root+'\\'+filename
print "\tCurrently working on file: "+filename
logtool.open_log(f)
mygroup = logtool.app.DataGroup
while (mygroup.Next()):
if 'CARinfo' in mygroup.Text:
for k, v in mycounterdict:
if k in mypkt.Text:
v[1]+=1
print mycounterdict