我有一个日志文件,我想编写一个python脚本以将信息从该日志解析到另一个.txt文件。我对如何入门一无所知,因为我对python很陌生。任何人都可以对我该怎么做
我的日志文件包含:
06 May 19 03:40:35 3 abCodeClearTrap Error Clear Trap (agent: 12367a12, chassis:12367a12, ErrIdText: ERROR ID TEXT, csssi: EXTIFG, clearedID: 0x089088394)
06 May 19 03:44:35 3 abCodeErrorTrap Error Trap (agent: 12368a15, chassis: 12368a15, ErrIdText: Skip this item, csssi: SSRSSR, clearedID: 0x089088394)
说用户要解析日期,时间,座席,清除和ErrIDText。 我将如何去做。 预先感谢
答案 0 :(得分:2)
您问题的完整答案有点太多,但是我可以为您提供一些指导。您应该阅读有关regex
的信息,您可以将其与python的re
模块一起使用。因此,我只会解析您字符串中的日期:
import re
string='06 May 19 03:40:35 3 abCodeClearTrap Error Clear Trap (agent: 12367a12, chassis:12367a12, ErrIdText: ERROR ID TEXT, csssi: EXTIFG, clearedID: 0x089088394)\n\
06 May 19 03:44:35 3 abCodeErrorTrap Error Trap (agent: 12368a15, chassis: 12368a15, ErrIdText: Skip this item, csssi: SSRSSR, clearedID: 0x089088394)'
split_error=string.split('\n')
dates=[]
for error in split_error:
date=re.match('\d{2} \w+ \d{2}', error).group(0)
dates.append(date)
您可以通过列表理解来更有效地执行此操作,但是如果您不熟悉Python,最好使用可读性更高的代码。
我将错误的每一行分割成一个列表,然后搜索两个数字('\d{2}'
),空格(),单词字符或更多字符({{1})的组合}),空格(
'\w+'
)和每个字符串中的两个数字()并从中提取出来。然后,我将日期附加到
'\d{2}'
列表中。您可以找到类似的模式来提取所需的大多数数据。
祝你好运!
编辑:如@Reedinationer所建议,regex cheat sheet是阅读一些关于dates
模块的知识之后的一个很好的链接,当我忘记怎么做时,我总是去那里正则表达式
答案 1 :(得分:2)
这是一个粗略的示例,您如何使用open()
打开日志文件,并使用re
模块和str.split()
解析其中的一些值:
import re
with open('myfile.log') as f:
lines = f.readlines()
data = []
for line in lines:
date = re.match(r'\d{2} \w+ \d{2}', line).group(0)
time = line.split()[3]
agent = re.search(r'agent:\s(.*?),', line).group(1)
errID = re.search(r'ErrIdText:\s(.*?),', line).group(1)
clear = re.search(r'clearedID:\s(.*?)\)', line).group(1)
row = [date, time, agent, errID, clear]
data.append(row)
for row in data:
print(row)
输出:
['06 May 19', '03:40:35', '12367a12', 'ERROR ID TEXT', '0x089088394'] ['06 May 19', '03:44:35', '12368a15', 'Skip this item', '0x089088394']