在开始实时读取日志文件之前,我们首先需要打开一个日志文件。可以使用Python的内置函数open()来打开文件,并且还可以设置打开方式和编码方式。下面是打开一个日志文件并指定为只读模式的示例代码:
log_file = open('path/to/logfile.log', 'r')
请注意,这里的path/to/logfile.log需要替换为你要打开的日志文件的实际路径。
1.常规方法:从前往后依次读取
步骤:open打开文件。
读取文件,把文件所有行读入内存。
遍历所有行,提取指定行的数据。
优点:简单,方便
缺点:当文件大了以后时间太慢,无法忍受
2.推荐方法:
步骤:open打开日志文件。
移动文件读取指针到文件末尾。
从后往前移动指针直到合适的位置。
读取文件,提取指定行的数据。
优点:时间相对固定,适合处理大文件
log_file = open('C:/Users/qq/Desktop/atmb.log', 'r')
fname = 'C:/Users/qq/Desktop/atmb.log'
with open(fname, 'r', encoding='utf-8') as f: # 打开文件
lines = f.readlines() # 读取所有行
first_line = lines[0] # 取第一行
last_line = lines[-1] # 取最后一行
# print('文件' + fname + '第一行为:'+ first_line)
print('文件' + fname + '最后一行为:' + last_line)
可以将最后一行的内容保存到另一个文件atmb1中
#1.写入单行
file = open('C:/Users/qq/Desktop/atmb1.log', mode='w', encoding='utf-8')
# write 写入
file.write(lines[-1])
# 关闭文件,不关闭文件可能会出问题
file.close()
接着,利用下面脚本提取最后一行的第一列出来即可
import codecs
f = codecs.open('C:/Users/qq/Desktop/atmb1.log', mode='r', encoding='utf-8') # 打开txt文件,以‘utf-8'编码读取
line = f.readline() # 以行的形式进行读取文件
list = []
while line:
a = line.split(',') # 当数据以“,”分隔时,用line.split(',')
b = a[0:1] # 选取需要读取数据的列数
list.append(b) # 将数据添加在list中
line = f.readline()
print(b)
# 3、企业微信机器人发送消息:提供给企业微信发送图片信息所需
import requests
import json
class WXWork_SMS :
# 文本类型消息
def send_msg_txt(self) :
headers = {"Content-Type" : "text/plain"}
send_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=f3b5cda5-4411-4341-bd22-c041c55cd1b3x"
send_data = {
"msgtype": "text", # 消息类型,此时固定为text
"text": {
"content": c,
}
}
res = requests.post(url = send_url, headers = headers, json = send_data)
print(res.text)
if __name__ == '__main__' :
sms = WXWork_SMS()
sms.send_msg_txt()
在结束对日志文件的操作后,我们需要关闭文件以释放资源。可以使用Python的close()函数来关闭打开的日志文件。下面是一个示例代码:
log_file.close()
在本文中,我们介绍了如何使用Python实时读取日志文件。通过打开日志文件、实时读取日志文件的新内容、实时读取日志文件的更新部分以及关闭日志文件等步骤,我们可以灵活地获取并分析系统的日志信息。
log_file = open('C:/Users/qq/Desktop/atmb.log', 'r')
fname = 'C:/Users/qq/Desktop/atmb.log'
with open(fname, 'r', encoding='utf-8') as f: # 打开文件
lines = f.readlines() # 读取所有行
first_line = lines[0] # 取第一行
last_line = lines[-1] # 取最后一行
# print('文件' + fname + '第一行为:'+ first_line)
# print('文件' + fname + '最后一行为:' + last_line)
print(lines[-1])
#1.写入单行
file = open('C:/Users/qq/Desktop/atmb1.log', mode='w', encoding='utf-8')
# write 写入
file.write(lines[-1])
# 关闭文件,不关闭文件可能会出问题
file.close()
import codecs
# 读取并保存txt文件数据前三列数据
f = codecs.open('C:/Users/qq/Desktop/atmb1.log', mode='r', encoding='utf-8') # 打开txt文件,以‘utf-8'编码读取
line = f.readline() # 以行的形式进行读取文件
list = []
while line:
a = line.split(',') # 当数据以“,”分隔时,用line.split(',')
b = a[0:1] # 选取需要读取数据的列数
list.append(b) # 将数据添加在list中
line = f.readline()
print(b)
c= ''.join(map(str, b)) # 将数组转换为字符串,企业微信无法发送数组b,需要转换为字符串c
print(c)
# 3、企业微信机器人发送消息:提供给企业微信发送图片信息所需
import requests
import json
class WXWork_SMS :
# 文本类型消息
def send_msg_txt(self) :
headers = {"Content-Type" : "text/plain"}
send_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=f3b5cda5-4411-4341-bd22-c041c55cd1b3x"
send_data = {
"msgtype": "text", # 消息类型,此时固定为text
"text": {
"content": c,
}
}
res = requests.post(url = send_url, headers = headers, json = send_data)
print(res.text)
if __name__ == '__main__' :
sms = WXWork_SMS()
sms.send_msg_txt()