【问题标题】:Extract Specific Data from Txt file python从 Txt 文件 python 中提取特定数据
【发布时间】:2021-08-26 21:49:34
【问题描述】:

我有一个 txt.fil(服务器日志),只想从中提取某些字段并将其写入 csv:

Date=2021-01-04 23:45:47.131 interaction=basic id=12333 personalid=11117 tisract=jinx fabrics=xyz session_id=adsflkixx endpoint=tool/tac/product/case

基本上有几百万行这样的

我怎样才能只从 txt 文件中提取日期、id 和端点,并将其转换为 dict,然后再转换为数据框?

名称重复值不断变化,所以我想将名称保留为标题,将值保留为数据行。

【问题讨论】:

标签: python logfile


【解决方案1】:

我建议使用更合适的工具,例如 ELK Stack 进行日志解析,但如果您想使用 Python...

使用正则表达式

import re
import csv

regex = r"^Date=(\d{4}-\d{2}-\d{2} (?:\d{2}:){2}\d{2}\.\d{3})\W.*\sid=(\d+).*\sendpoint=(.+)$"

with open('log.txt') as f, open('out.csv', 'w') as f_out:
  fields = ["Date", "id", "endpoint"]
  writer = csv.DictWriter(f_out, fieldnames=fields)
  writer.writeheader()
  for line in f:
    matches = re.finditer(regex, line, re.MULTILINE)
    for matchNum, match in enumerate(matches, start=1):
      data = {fields[groupNum]: match.group(groupNum + 1) for groupNum in range(len(match.groups()))}
      writer.writerow(data)

样本输出

$ cat out.csv
Date,id,endpoint
2021-01-04 23:45:47.131,12333,tool/tac/product/case

【讨论】:

  • 一个仍然存在的问题是:有些行没有像说端点这样的变量。因此,它将一起跳过该行。我想做的是,如果没有端点,只需添加“nan”或将其留空。该列将在那里;如果列名存在,它将获取值并填充它,否则它将添加“nan”或将其留空。
  • 看看?正则表达式组操作符做了什么
最近更新 更多