Python从输出变量中搜索字符串并打印下两行

时间:2018-04-01 15:29:16

标签: python python-2.7

如何从命令输出中搜索字符串并从输出中打印下两行。

以下是代码:

a = """
Some lines I do not want 
----- -------- --
I need this line
I need this line also
Again few lines i do not want
"""
for line in a.split("\n"):
    if line.startswith("----"):
        print "I need this line"
        print "I need this line also"

我在上面的代码中做的是我正在检查行是否以“----”开头,这样可以正常工作。现在如何在行开头后用“----”打印两行。在这个代码打印示例中,“我需要这一行,我也需要这一行”

5 个答案:

答案 0 :(得分:3)

你可以从列表中创建一个迭代器(不需要文件句柄BTW)。然后让for迭代,但允许在循环中手动使用next

a = """
Some lines I do not want
----- -------- --
I need this line
I need this line also
Again few lines i do not want
"""
my_iter = iter(a.splitlines())
for line in my_iter:
    if line.startswith("----"):
        print(next(my_iter))
        print(next(my_iter))

如果破折号后面没有足够的行,则此代码将引发StopIteration。避免这个问题的另一种选择是(礼貌Jon Clements)

from itertools import islice

my_iter = iter(a.splitlines(True))  # preserves \n (like file handle would do)
for line in my_iter:
    if line.startswith("----"):
        print(''.join(islice(my_iter, 2)))

另一种方法,不分割字符串:

print(re.search("-----.*\n(.*\n.*)",a).group(1))

这会在 unsplitted 多行字符串中的模式后搜索2行。如果re.search返回None,可能会崩溃,因为 不再有行。

在这两种情况下,你都会得到:

I need this line
I need this line also

答案 1 :(得分:0)

这是一种简单的方法:

a = """
Some lines I do not want 
----- -------- --
I need this line
I need this line also
Again few lines i do not want
"""

lines = a.split("\n")
for i in range(len(lines)):
    if lines[i].startswith("----"):  # if current line starts with ----
        print(lines[i+1])  # print next line.
        print(lines[i+2])  # print line following next line.

# I need this line
# I need this line also                                      

答案 2 :(得分:0)

您可以存储当前行的索引,从而获得下一行n行:

a = """
Some lines I do not want 
----- -------- --
I need this line
I need this line also
Again few lines i do not want
"""
lines = a.split("\n")
for index, line in enumerate(lines):
    if line.startswith("----"):
        print lines[index+1]
        print lines[index+2]

您可能想查看IndexError s。

答案 3 :(得分:0)

平原(几乎是C):

>>> a = """
Some lines I do not want
----- -------- --
I need this line
I need this line also
Again few lines i do not want
No nee
---- ------- --
Need this
And this
But Not this
"""

>>> start_printing, lines_printed = False, 0
>>> for line in a.split('\n'):
        if line.startswith('----'):
            start_printing = True
        elif start_printing:
            print line
            lines_printed += 1
        if lines_printed>=2:
            start_printing=False
            lines_printed = 0


I need this line
I need this line also
Need this
And this

答案 4 :(得分:0)

这里有列表推导的内容:

    a = """
    Some lines I do not want 
    ----- -------- --
    I need this line
    I need this line also
    -----------------------
    A line after (---)
    A consecutive line after (---)
    """

   lines = a.split("\n")
   test = [print(lines[index+1] + '\n' + lines[index+2]) for index in range(len(lines)) if lines[index].startswith("----")]

 #Output:I need this line
         #I need this line also
         #A line after (---)
         #A consecutive line after (---)

我在使用更多句子进一步测试时碰到IndexError,所以我添加了一个异常块:

a = """
Some lines I do not want 
----- -------- --
I need this line
I need this line also
-----------------------
A line after (---)
A consecutive line after (---)
-------------------------
Just for fun
Another one
-------------------------
"""
lines = a.split("\n")
try:
    test = [print(lines[index+1] + '\n' + lines[index+2]) for index in range(len(lines)) if lines[index].startswith("----")]
except:
    pass

现在,所需的输出没有例外:

I need this line
I need this line also
A line after (---)
A consecutive line after (---)
Just for fun
Another one