捕获上一个时间戳,而无需使用Python读取完整的文件

问题描述 投票:0回答:1

我对python还是相当陌生,我试图使用python捕获syslog文件的最后一行,但无法做到这一点。这是一个巨大的日志文件,因此我要避免将整个文件加载到内存中。我只想读取文件的最后一行并捕获时间戳以进行进一步分析。

我有下面的代码将所有时间戳捕获到一个python dict中,一旦完成最后一个时间戳,它将花费很长时间才能运行到我的计划。我的计划是反转列表并捕获索引中的第一个对象[0]:

lastFile函数使用glob模块,并为我提供了最新的日志文件名,该文件名将被输入到main函数的lastEdit中。

有更好的方法吗?>

脚本1:

#!/usr/bin/python
import glob
import os
import re

def main():
    syslogDir = (r'Location/*')
    listOfFiles = glob.glob(syslogDir)
    recentEdit  = lastFile(syslogDir)
    print(recentEdit)
    astack=[]
    with open(recentEdit, "r") as f:
        for line in f:
            result = [re.findall(r'\d{4}.\d{2}.\d{2}T\d{2}.\d{2}.\d{2}.\d+.\d{2}.\d{2}',line)]
            print(result)

def lastFile(i):
    listOfFiles = glob.glob(i)
    latestFile = max(listOfFiles, key=os.path.getctime)
    return(latestFile)



if __name__ == '__main__': main()

Script2:
###############################################################################
###############################################################################
#The readline() gives me the first line of the log file which is also not what I am looking for:



#!/usr/bin/python
import glob
import os
import re

def main():
    syslogDir = (r'Location/*')
    listOfFiles = glob.glob(syslogDir)
    recentEdit  = lastFile(syslogDir)
    print(recentEdit)
    with open(recentEdit, "r") as f:
        fLastLine = f.readline()
        print(fLastLine)
#    astack=[]
#    with open(recentEdit, "r") as f:
#        for line in f:
#            result = [re.findall(r'\d{4}.\d{2}.\d{2}T\d{2}.\d{2}.\d{2}.\d+.\d{2}.\d{2}',line)]
#            print(result)

def lastFile(i):
    listOfFiles = glob.glob(i)
    latestFile = max(listOfFiles, key=os.path.getctime)
    return(latestFile)



if __name__ == '__main__': main()

非常感谢您的帮助!

真诚的。

我对python还是相当陌生,我试图使用python捕获syslog文件的最后一行,但无法做到这一点。这是一个巨大的日志文件,因此我要避免将整个文件加载到内存中。我...

python regex timestamp analytics
1个回答
0
投票

如果要直接转到文件末尾。请按照以下步骤操作:

© www.soinside.com 2019 - 2024. All rights reserved.