使用python脚本将文本从文件解析到另一个文件

时间:2019-05-08 21:11:52

标签: python shell

我有一个日志文件,我想编写一个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。 我将如何去做。 预先感谢

2 个答案:

答案 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']
相关问题