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
  Line graph with two superimposed lines sawtooth500 4 349 Apr-02-2024, 08:56 PM
Last Post: sawtooth500
  How to add multi-line comment section? Winfried 1 220 Mar-24-2024, 04:34 PM
Last Post: deanhystad
  break print_format lengthy line akbarza 4 385 Mar-13-2024, 08:35 AM
Last Post: akbarza
  Reading and storing a line of output from pexpect child eagerissac 1 4,273 Feb-20-2024, 05:51 AM
Last Post: ayoshittu
  coma separator is printed on a new line for some reason tester_V 4 495 Feb-02-2024, 06:06 PM
Last Post: tester_V
  problem with spliting line in print akbarza 3 398 Jan-23-2024, 04:11 PM
Last Post: deanhystad
  Unable to understand the meaning of the line of code. jahuja73 0 310 Jan-23-2024, 05:09 AM
Last Post: jahuja73
  Receive Input on Same Line? johnywhy 8 731 Jan-16-2024, 03:45 AM
Last Post: johnywhy
  Reading in of line not working? garynewport 2 856 Sep-19-2023, 02:22 PM
Last Post: snippsat
  'answers 2' is not defined on line 27 0814uu 4 743 Sep-02-2023, 11:02 PM
Last Post: 0814uu

Forum Jump:

User Panel Messages

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