代码之家  ›  专栏  ›  技术社区  ›  etm124

抓住一条线的一部分直到一个空白

  •  1
  • etm124  · 技术社区  · 6 年前

    我有一行文字看起来像:

    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?}]
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Jean-François Fabre    6 年前

    你可以用 str.find 带偏移:

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

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

    另一种选择是切片 然后 拆分/分割(即使之后没有空间可用):

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

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

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

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