python统计前10名

时间:2013-05-30 21:26:09

标签: python list parsing dictionary

使用python 2.6

我有大文本文件。 以下是前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

我需要能够在这种情况下找到用户名“html_log:”标签后面的文字

我还需要评级(用户名旁边的第一组值。)

输出将检查整个txt文件并输出前10名评分最高的玩家。

请注意,并不总是有16组值,有些值远远少于。

制造

bob 1217.1
jeff 1153
fred 28.7

2 个答案:

答案 0 :(得分:2)

在这种情况下,我实际上会使用正则表达式。

只需将html_log:视为记录开始标记,下一部分直到以空格为名称。分数之后的下一部分,您可以转换为浮动进行比较:

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 :(得分:0)

如果您想知道如何阅读此文件,则直接算法将首先以字符串形式读取整个文件。然后使用string.split(' ')用空格分割所有内容,然后通过for循环检查每个部分是否包含html_log:if yes here是用户名,下一个元素是最高速率!并将所有这些内容存储在字典中,以便进一步排序或进行其他操作。