Python Forum
Getting last line of each line occurrence in a file
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Getting last line of each line occurrence in a file
#1
Greetings!
I hope I'm not overstaying my welcome here...
Anyway, I’m looking for a set of lines from a file.
See the example of a file below, the lines of interest are “TEST Started” and “TEST end”.
For each ‘TEST Started’ line there are multiple ‘TEST end’
I’d like to print the Last occurrence of the ‘TEST end’ line for each ‘TEST Started’’ line.
I got a partially working script, for each “Test started” line it prints the First occurrences of the “TEST end”
File example:
[7:02:27 AM 4/20/2020] some stuf
[3:12:55 PM 4/20/2020] TEST Started <-- 1
[3:12:57 PM 4/20/2020] some stuf
[3:12:59 PM 4/20/2020] some stuf
[3:35:47 PM 4/20/2020] TEST end 
[3:35:48 PM 4/20/2020] TEST end 
[3:35:49 PM 4/20/2020] TEST end <---- 1
======================
[3:51:23 PM 4/20/2020] some stuf
[3:51:24 PM 4/20/2020] some stuf
[3:52:23 PM 4/20/2020] TEST Started  <-- 2
[3:55:25 PM 4/20/2020] some stuf
[3:56:18 PM 4/20/2020] some stuf
[3:56:19 PM 4/20/2020] some stuf
[3:56:20 PM 4/20/2020] some stuf
[3:56:21 PM 4/20/2020] some stuf
[3:56:22 PM 4/20/2020] TEST end
[3:57:23 PM 4/20/2020] TEST end 
[4:15:48 PM 4/20/2020] TEST end 
[4:15:49 PM 4/20/2020] TEST end <----  2
[4:15:50 PM 4/20/2020] some stuf
======================
[4:27:28 PM 4/20/2020] some stuf
[4:28:25 PM 4/20/2020] some stuf
[4:29:29 PM 4/20/2020] some stuf
[4:30:12 PM 4/20/2020] some stuf
[4:44:14 PM 4/20/2020] TEST Started <-- 3
[4:44:14 PM 4/20/2020] some stuf
[4:44:15 PM 4/20/2020] some stuf
[4:44:16 PM 4/20/2020] TEST end
[4:44:20 PM 4/20/2020] TEST end <---- 3 
Script:
with open('c:/01/somefile.txt','r') as fl :
    ts_start = ''
    ts_end = ''
    for el in fl :
        el=el.strip()
        if 'TEST Started' in el :
            ts_start = el
        elif 'TEST end' in el :
            ts_end = el
            if ts_start!='' and ts_end!='' :
                print(f" START - :{ts_start}, END -- {ts_end}")
                ts_start = ''
                ts_end = ''   
Thank you.
Reply
#2
Your logic is backward. You should present results when you encounter a start, not an end. It is omly when you see START, or run out of lines, that you know you found the last end.
with open('data.txt', 'r') as file:
    start = end = None
    for line in map(str.strip, file):
        if 'TEST Started' in line:
            if end:
                # Print previous start/end pair
                print(start, end, sep="\n", end="\n\n")
            start = line
            end = None
        elif 'TEST end' in line:
            end = line
    if start and end:
        print(start, end, sep="\n")
tester_V likes this post
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Reading and storing a line of output from pexpect child eagerissac 1 4,011 Feb-20-2024, 05:51 AM
Last Post: ayoshittu
  coma separator is printed on a new line for some reason tester_V 4 377 Feb-02-2024, 06:06 PM
Last Post: tester_V
  problem with spliting line in print akbarza 3 280 Jan-23-2024, 04:11 PM
Last Post: deanhystad
  Unable to understand the meaning of the line of code. jahuja73 0 235 Jan-23-2024, 05:09 AM
Last Post: jahuja73
  Receive Input on Same Line? johnywhy 8 527 Jan-16-2024, 03:45 AM
Last Post: johnywhy
  Reading in of line not working? garynewport 2 727 Sep-19-2023, 02:22 PM
Last Post: snippsat
  'answers 2' is not defined on line 27 0814uu 4 608 Sep-02-2023, 11:02 PM
Last Post: 0814uu
  Sequential number for rows retrieved and storing the Primary UKey to the line number GYKR 2 521 Aug-22-2023, 10:14 AM
Last Post: GYKR
  Line by line execution of instructions JosephR 3 622 Jul-24-2023, 09:10 PM
Last Post: deanhystad
  Python Serial: How to read the complete line to insert to MySQL? sylar 1 734 Mar-21-2023, 10:06 PM
Last Post: deanhystad

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020