How do I Search string from command output and print next two lines from the output.
Below is code:
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"
What I am doing in above code is I am checking if line starts with "----" and This works fine. Now How do i print exactly two lines after line starts with "----". In this example code print, " I need this line and I need this line also"
you can create an iterator out of the list (no need with a file handle BTW). Then let for
iterate, but allow to use next
manually within the loop:
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))
This code will raise StopIteration
if there aren't enough lines after the dashes. One alternative that avoids this issue is (courtesy 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)))
Another way, without splitting the string:
print(re.search("-----.*\n(.*\n.*)",a).group(1))
this searches for 2 lines after the pattern in the unsplitted , multi-line string. Can crash if re.search
returns None
because there are no more lines.
In both cases you get:
I need this line
I need this line also
This is one simple way:
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
You can store the index of the current line and thus get the next n
lines:
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]
You may want to check for IndexError
s though.
Plain way (almost 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
Here something with list comprehensions:
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 (---)
I bumped into IndexError
on further testing with more sentences, so I added an exception block:
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
Now, the desired output without exceptions:
I need this line
I need this line also
A line after (---)
A consecutive line after (---)
Just for fun
Another one
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.