gpt4 book ai didi

python - 如何读取具有特定字符串的文件的最后 n 行?

转载 作者:行者123 更新时间:2023-11-30 22:18:15 25 4
gpt4 key购买 nike

我有一个日志文件,其中包含数据行和一些说明文本行。我想从文件中读取最后 10 行数据。我怎样才能用Python做到这一点?我的意思是,有没有比使用更快的方法

for line in reversed(open("filename").readlines()):

然后解析文件。我猜它会打开整个文件,并且如果日志文件很大的话,速度会很慢。那么有没有一种方法可以只打开文件末尾并从中读取数据呢?我所需要的只是包含文本 ,Kes 的文件的最后 10 行。如果没有 10 行具有 ,Kes,则应按文件中出现的顺序返回所有具有 ,Kes 的行。

最佳答案

您必须跨越前 (N - 10) 行,但您可以通过巧妙的方式完成。消耗时间并不意味着您也必须消耗内存。在您的代码中,您使用 readlines() 读取所有行并返回它们的列表。这是因为 fileobject 本身是一个类似迭代器的对象,您可以使用长度有限的容器并将所有行插入其中,最后它只会保留最后 N 行。在 python 中,您可以使用双端队列,并将其 maxlen 设置为 10:

from collections import deque

with open("filename") as f:
last_ten_lines = deque(f,maxlen=10)

关于最后一点,如果您想过滤包含单词 ,Kes 的行,最好的方法是循环遍历文件对象的相反部分。

from itertools import islice
def get_last_n(file_name, n=10):
""" Returns the last N filtered lines. """
def loop_over():
with open(file_name) as f:
for line in reversed(f):
if ",Kes" in line:
yield line
return islice(get_last_ten(), N)

关于python - 如何读取具有特定字符串的文件的最后 n 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49422745/

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