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