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

2024-06-25 05:52:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个日志文件,我想编写一个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)

假设用户想要解析日期、时间、代理、Clear和ErrIDText。 我该怎么做呢。 提前谢谢


Tags: 文件txt脚本信息errormayagentclear
2条回答

下面是一个粗略的示例,说明如何使用^{}打开日志文件,并使用^{}模块和^{}解析其中的一些值:

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)

Output:

['06 May 19', '03:40:35', '12367a12', 'ERROR ID TEXT', '0x089088394']
['06 May 19', '03:44:35', '12368a15', 'Skip this item', '0x089088394']

你的问题的完整答案有点过分,但我可以给你一点指导。您应该阅读有关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}')、一个空格(), a word character or more ('\w+')、一个空格()和两个数字('\d{2}')的组合并从中提取出来。然后我将日期附加到dates列表中。您可以找到类似的模式来提取所需的大部分数据。你知道吗

祝你好运!你知道吗

编辑:正如@Reedinationer所建议的,在阅读了一些re模块之后,了解模式的一个很好的链接是regex cheat sheet,当我忘记如何执行一些正则表达式时,我总是去那里

相关问题 更多 >