从中提取多个非相邻字段线.分割()

2024-05-17 14:12:15 发布

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

尝试使用Python改进Shoutcast的日志解析器。在

给定此日志条目行:

line = "207.86.121.131 207.86.121.131 2012-11-27 13:02:17 /stream?title=Joe%20Bonamassa%20%2D%20I%20Got%20All%20You%20Need 200 iTunes%2F10%2E7%20%28Windows%3B%20Microsoft%20Windows%207%20x64%20Home%20Premium%20Edition%20Service%20Pack%201%20%28Build%207601%29%29%20AppleWebKit%2F536%2E26%2E9 622592 27 184464"

如何提取字段0, 5, 8?在

我的输出应该是207.86.121.131 200 27

当{8>单独地,或者当这个字段

但是如果我尝试line.split()[0,5,8]我会得到一个错误

^{pr2}$

如果我改为尝试line.split()[[0,5,8]]我得到一个错误,它说

TypeError: list indices must be integers, not list

那么,有没有办法只使用一个字段来提取这3个字段线.分割? 在


Tags: 解析器streamtitle错误line条目belist
3条回答

是的,您必须存储line.split()返回的列表,然后获取索引:

>>> splitted = line.split()
>>> fields = (x[0], x[5], x[8])
>>> print(fields)
('207.86.121.131', '200', '27')

或者,如果您想要一行代码,可以使用^{}和列表理解:

^{pr2}$

您可以使用itemgetter。在

>>> from operator import itemgetter
>>> itemgetter(0,5,8)(line.split())
('207.86.121.131', '200', '27')

你可以试试这个:

' '.join([x for i, x in enumerate(line.split()) if i in (0, 5, 8)])

结果是:

^{pr2}$

相关问题 更多 >