首页 > 解决方案 > 抓取一行的一部分直到一个空白

问题描述

我有一行看起来像这样的文本:

2018-05-22 00:00:00 STATUS ERROR_CODE /home/etm124/script.py ANOTHER_MSG

我想要做的是获取脚本名称。我不能在空白处拆分,因为STATUS可能不止一个词,但是脚本值始终位于位置 [411] 中line。我目前正在尝试做类似的事情:

with open(my_log, 'r') as fp:
    for line in fp:
        if line[45] == '7':    #ERROR_CODE
            print line[411: {white_space?}]

标签: pythonpython-2.7

解决方案


您可以使用str.find偏移量:

offset = 411
line[offset:line.find(" ",offset)]

它很快(只有一片),但问题是:如果没有空间,你会得到-1结果,你会失去 1 个字符。

另一种方法是切片然后拆分/分区(即使之后没有空间也可以):

line[411:].split()[0]

一些更复杂的代码来处理“缺失的空间”并且只执行 1 个切片和 1 个查找将是:

offset = 411
spacepos = line.find(" ",offset)
line[offset:spacepos if spacepos != -1 else None])

所以如果find返回-1,则切片到字符串的末尾。


推荐阅读