我对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文件的最后一行,但无法做到这一点。这是一个巨大的日志文件,因此我要避免将整个文件加载到内存中。我...
如果要直接转到文件末尾。请按照以下步骤操作: