python - 正则表达式从日志文件中查找组和匹配项
问题描述
我有一个包含很多行的日志文件。例子:
219.133.7.154 - price5585 [21/Jun/2019:15:45:53 -0700] "GET /incubate/incubate HTTP/1.1" 201 12126
我需要这样的输出:
{host: 219.133.7.154, user: price5585, date: 21/Jun/2019:15:45:53 -0700, req: GET /incubate/incubate HTTP/1.1}
我真的很挣扎,只有两件第一件事起作用。这是我的代码:
pattern = """
(?P<host>.*) #Host name
(-\ )
(?P<username>\w*) #username
(?P<time>\w*) #Time
"""
模式应该是什么样子,这样我就可以提取我需要的一切?
解决方案
你必须使用正则表达式吗?因为您的目标可以通过解析由空格分隔的字段轻松实现:
#!/usr/bin/env python3
LINE = "219.133.7.154 - price5585 [21/Jun/2019:15:45:53 -0700] \"GET /incubate/incubate HTTP/1.1\" 201 12126"
body = LINE.split("\"")[1]
split_line = LINE.split(" ")
output_dict = {"host": split_line[0],
"user": split_line[2],
"date": " ".join([split_line[3], split_line[4]]),
"req": body}
print(output_dict)
输出:
{'host': '219.133.7.154', 'user': 'price5585', 'date': '[21/Jun/2019:15:45:53 -0700]', 'req': 'GET /incubate/incubate HTTP/1.1'}
推荐阅读
- python-2.7 - 想要将数据推入/拉出 SalesForce Accounts/leads 从/到我的外部 Web 应用程序
- php - 如何将 PHP 数组转换为 json 字符串
- php - 致命错误:类:找不到 SQLi - 无法将 mySqli 连接到 WAMP
- angular - 清除输入下方的输入字段已更改
- mysql - 返回中间字符串并计数
- c++ - 将位图设置为 CStatic 对象
- python - python:过滤具有特定值中匹配字符串的字典
- python - 如何在 Python 3D 图中订购 ax.scatter 和 ax.quiver?
- python - 从另一个数据帧更新熊猫数据帧
- vue.js - 通过 Vue 进行轮播(如何使用过渡?)