2013-05-30 5 views
2

using python 2.6статистика python top 10

У меня есть большой текстовый файл. Ниже перечислены первые 3 записи, но есть более 50 пользователей, которых я должен проверить.

html_log:jeff 1153.3 1.84 625:54 1 2 71 3 2 10 7:58 499 3 5 616:36 241 36 html_log:fred 28.7 1.04 27:34 -10 18 13 0:48 37 18 8 -3.63 html_log:bob 1217.1 1.75 696:48 1 5 38 6 109 61 14:42 633 223 25 435:36 182 34 ... continues 

Мне нужно beable, чтобы найти имя пользователя в этом случае текст после «html_log:» теги

Я также нужен рейтинг

(первый набор значений рядом с именем пользователя.)

Вывод будет проверять весь файл txt и выводить 10 лучших игроков с самым высоким рейтингом.

Обратите внимание, что не всегда 16 наборов значений, некоторые из них содержат гораздо меньше.

производства:

bob 1217.1 
jeff 1153 
fred 28.7 
+1

В чем проблема? –

+0

Что не работает и где вы застряли? – Blender

+3

Есть ли новые строки в файле ввода или все это только одна длинная строка? –

ответ

2

В этом случае я бы использовал регулярное выражение.

Просто рассмотрите html_log: как маркер начала записи, а следующая часть - до пробела. Следующая часть после нее - оценка, которую вы можете преобразовать в float для сравнения:

s = "html_log:jeff 1153.3 1.84 625:54 1 2 71 3 2 10 7:58 499 3 5 616:36 241 36 html_log:fred 28.7 1.04 27:34 -10 18 13 0:48 37 18 8 -3.63 html_log:bob 1217.1 1.75 696:48 1 538 6 109 61 14:42 633 223 25 435:36 182 34" 
pattern = re.compile("html_log:(?P<name>[^ ]*) (?P<score>[^ ]*)") 
print sorted(pattern.findall(s), key=lambda x: float(x[1]), reverse=True) 

# [('bob', '1217.1'), ('jeff', '1153.3'), ('fred', '28.7')] 
+1

это работает, тогда я могу просто .split и получить первый 1: 10 в списке :) спасибо alot @Thomas Fenzl – user2371027

+0

не нужно разделить, возвращаемое значение 'sorted' уже есть список –

0

Если вы хотите знать, как читать этот файл прямой вперед алгоритм будет, во-первых, прочитать весь файл в строку. затем используйте string.split(' '), чтобы разделить все с пространством, а затем через цикл for на каждой части проверки проверьте, содержит ли элемент html_log: если да, то это имя пользователя, а следующий элемент - самая высокая скорость! и хранить все эти материалы в словаре для дальнейшей сортировки или других операций.

+0

, столкнувшись с трудностями при работе с диктофонами, я не очень хорошо знаком с ними. – user2371027

+0

ОК, так что для того, чтобы иметь дик, например переменную с именем dic, вы можете легко написать dic = {} для инициализации, а затем для ее создания простой dic [key] = значение – Ehsan