2

使用 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
4

2 回答 2

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')]
于 2013-05-30T21:37:36.683 回答
0

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

于 2013-05-30T21:30:48.790 回答