Python:解析log-fi的部分

2024-05-21 07:49:53 发布

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

我有一个日志文件的部分如下所示:

"/log?action=End&env=123&id=8000&cat=baseball"
"/log?action=start&get=3210&rsa=456&key=golf"

我想分析出每个部分的结果如下:

^{pr2}$

我研究过正则表达式和匹配,但是我的很多日志都有不同的序列,这让我相信这是不可能的。有什么建议吗?在


Tags: 文件keyenvlogidget序列action
3条回答

在不知道可能输入的域是什么的情况下说起来有点困难,但下面是一个猜测,什么对您有效:

log = "/log?action=End&env=123&id=8000&cat=baseball\n/log?action=start&get=3210&rsa=456&key=golf"

logLines = [line.split("&") for line in log.split('\n')]
logLines = [tuple(line[0].split("=")+line[1:]) for line in logLines]

print logLines

输出:

^{pr2}$

这假设在第一个字符串的末尾不需要“=”。在

您可以拆分几次:

s = '/log?action=End&env=123&id=8000&cat=baseball'
L = s.split("&")
L[0:1]=L[0].split("=")

输出:

^{pr2}$

这显然是URL的一个片段,所以最好的解析方法是使用URL解析工具。stdlib附带了^{},这正是您想要的。在

例如:

>>> import urlparse
>>> s = "/log?action=End&env=123&id=8000&cat=baseball"
>>> bits = urlparse.urlparse(s)
>>> variables = urlparse.parse_qs(bits.query)
>>> variables
{'action': ['End'], 'cat': ['baseball'], 'env': ['123'], 'id': ['8000']}

如果您真的想得到您所要求的格式,可以使用parse_qsl,然后将键值对重新连接在一起。我不知道您为什么要在第一个查询变量中包含/log,或者第一个查询变量的值与其变量分开,但是如果您坚持这样做也是可行的:

^{pr2}$

如果您使用的是python3.x,只需将urlparse更改为urllib.parse,其余的都是一样的。在

相关问题 更多 >