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
Question [SOLVED] [Beautiful Soup] Move line to top in HTML head? Winfried 0 159 Apr-13-2025, 05:50 AM
Last Post: Winfried
  Βad Input on line 12 Azdaghost 4 942 Mar-25-2025, 02:40 PM
Last Post: deanhystad
  Insert command line in script lif 4 912 Mar-24-2025, 10:30 PM
Last Post: lif
  Entry field random pull from list, each return own line Bear1981 6 742 Feb-25-2025, 06:09 AM
Last Post: Pedroski55
  How to revert back to a previous line from user input Sharkenn64u 2 872 Dec-28-2024, 08:02 AM
Last Post: Pedroski55
  Pandas - error when running Pycharm, but works on cmd line zxcv101 2 2,391 Sep-09-2024, 08:03 AM
Last Post: pinkang
  Simplest way to run external command line app with parameters? Winfried 2 1,197 Aug-19-2024, 03:11 PM
Last Post: snippsat
  Printing the code line number arbiel 6 1,599 Jun-30-2024, 08:01 AM
Last Post: arbiel
  How to add multi-line comment section? Winfried 2 1,324 Jun-04-2024, 07:24 AM
Last Post: Gribouillis
Information Is it possible to multi line a Basic Function Construct line statement? If so how? BrandonKastning 7 1,841 May-23-2024, 03:02 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