gpt4 book ai didi

python - 对原始日志文件中的前 20 个最高值进行排序

转载 作者:太空宇宙 更新时间:2023-11-03 15:40:51 26 4
gpt4 key购买 nike

从现有的日志文件中,我只能找出最高的响应时间 (R.T),但我需要从中获取前 20 个最高值。

我拥有的日志文件有数百万行,其中有不同的 R.T(响应时间)。

日志文件格式

示例:

00.00.00.000 - - [dd/mm/yyyy:hr:mm:se +0800] GET Url HTTP/1.1 200 dataconsumed (R.T) mainURL xxx/0.0 (x xxx 0.0; xx00) xx/00.00 (xx, xx xxx) /00.0.0000. xx/000.00
00.00.00.000 - - [dd/mm/yyyy:hr:mm:se +0800] GET Url HTTP/1.1 200 dataconsumed (R.T) mainURL xxx/0.0 (x xxx 0.0; xx00) xx/00.00 (xx, xx xxx) /00.0.0000. xx/000.00
00.00.00.000 - - [dd/mm/yyyy:hr:mm:se +0800] GET Url HTTP/1.1 200 dataconsumed (R.T) mainURL xxx/0.0 (x xxx 0.0; xx00) xx/00.00 (xx, xx xxx) /00.0.0000. xx/000.00
00.00.00.000 - - [dd/mm/yyyy:hr:mm:se +0800] GET Url HTTP/1.1 200 dataconsumed (R.T) mainURL xxx/0.0 (x xxx 0.0; xx00) xx/00.00 (xx, xx xxx) /00.0.0000. xx/000.00
00.00.00.000 - - [dd/mm/yyyy:hr:mm:se +0800] GET Url HTTP/1.1 200 dataconsumed (R.T) mainURL xxx/0.0 (x xxx 0.0; xx00) xx/00.00 (xx, xx xxx) /00.0.0000. xx/000.00

代码 1:

with open(r"file.txt","r") as f:
data = f.readlines()
# sort the data by response time descending using lambda as key
sorted_data = sorted(data,
key=lambda row: row.split()[10],
reverse=True)

输出:(具有高RT的日志文件)

00.00.00.000 - - [dd/mm/yyyy:hr:mm:se +0800] GET Url HTTP/1.1 200 dataconsumed (R.T) mainURL xxx/0.0 (x xxx 0.0; xx00) xx/00.00 (xx, xx xxx) /00.0.0000. xx/000.00

代码2

file = open(r"file.txt","r")
rts = []
for line in file:
line_array = line.split(" ")
rts.append(float(line_array[10]))
max_rt = max(rts)
print "Max R.T is :", max_rt
file.close()

输出:最高 R.T

最大 R.T 为:R.T

救救我!!!

从日志文件中查找 20 个最高值。

最佳答案

为此目的,您可能需要使用堆。 Python 有一个 heapq 模块,其中有一个 nlargest 函数正是用于此目的。它将使您不必存储每一行​​,而这是排序和切片方法所必需的。

from heapq import nlargest

with open('naveen.log') as f:
top20 = nlargest(20, f, key=lambda L: float(L.split()[10]))

for t in top20:
print(t)

您还可以使用deque,它的最大长度是固定的。例如collections.deque(maxlen=20)

请参阅我上面的评论,请求澄清数据的格式。目前,如果您拆分一行(在空格上),则会将时间戳减半,并且您想要的参数位于第 11 个索引处。如果你所有的时间戳都有+0800,你可以使用第11个索引,这很好,但如果它们没有,那么你可能需要采用更复杂的方法来分割字符串(正则表达式)。

关于python - 对原始日志文件中的前 20 个最高值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42152091/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com