How to print next line in python

二次信任 提交于 2019-12-10 11:56:30

问题


I am trying to print next 3 lines after a match

for example input is :

Testing
Result
test1 : 12345
test2 : 23453
test3 : 2345454

so i am trying to search "Result" string in file and print next 3 lines from it:

Output will be :-

test1 : 12345
test2 : 23453
test3 : 2345454

my code is :

with open(filename, 'r+') as f:
    for line in f:
        print line
        if "Benchmark Results" in f:
            print f
            print next(f)

its only giving me the output :

testing

how do i get my desired output, help please


回答1:


First you need to check that the text is in the line (not in the fileobj f), and you can utilise islice to take the next 3 lines from f and print them, eg:

from itertools import islice

with open(filename) as f:
    for line in f:
        if 'Result' in line:
            print(''.join(islice(f, 3)))

The loop will continue from the line after the three printed. If you don't want that - put a break inside the if.




回答2:


I would suggest opening the file and spliting its content in lines, assigning the outcome to a variable so you can manipulate the data more comfortably:

file = open("test.txt").read().splitlines()

Then you can just check which line contains the string "Result", and print the three following lines:

for index, line in enumerate(file):
    if "Result" in line:
        print(file[index+1:index+4])



回答3:


You are testing (and printing) "f" instead of "line". Be careful about that. 'f' is the file pointer, line has your data.

  with open(filename, 'r+') as f:
      line = f.readline()
      while(line):
          if "Benchmark Results" in line:
               # Current line matches, print next 3 lines
               print(f.readline(),end="")
               print(f.readline(),end="")
               print(f.readline(),end="")
          line = f.readline()



回答4:


It is waiting for the first "Result" in the file and then prints the rest of the input:

import re, sys

bool = False
with open("input.txt", 'r+') as f:
    for line in f:
        if bool == True:
            sys.stdout.write(line)
        if re.search("Result",line):    #if it should match whole line, than it is also possible if "Result\n" == line: 
            bool = True

If you want end after first 3 prints, you may add variable cnt = 0 and change this part of code (for example this way):

        if bool == True:
            sys.stdout.write(line)
            cnt = cnt+1
            if cnt == 3:
                break



回答5:


with open('data', 'r') as f:
    lines = [ line.strip() for line in f]
    # get "Result" index
    ind = lines.index("Result")
    # get slice, add 4 since upper bound is non inclusive
    li = lines[ind:ind+4]
    print(li)
    ['Result', 'test1 : 12345', 'test2 : 23453', 'test3 : 2345454']

or as exercise with regex: 

import re  
with open('data', 'r') as f:

    text = f.read()
    # regex assumes that data as shown, ie, no blank lines between 'Result'
    # and the last needed line.
    mo =  re.search(r'Result(.*?\n){4}', text, re.MULTILINE|re.DOTALL)

    print(mo.group(0))

Result

test1 : 12345

test2 : 23453

test3 : 2345454


来源:https://stackoverflow.com/questions/33088234/how-to-print-next-line-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!