7

I have one text file. I am parsing some data using regex. So open the file and read it and the parse it. But I don't want to read and parse data after some specific line in that text file. For example

file start here..
some data...
SPECIFIC LINE
some data....

Now I don't want to read file after SPECIFIC LINE... Is there any way to stop reading when that line reaches?

ZygD
  • 8,011
  • 21
  • 49
  • 67
SAM
  • 85
  • 1
  • 1
  • 5

3 Answers3

7

This is pretty straight forward, you can terminate a loop early with a break statement.

filename = 'somefile.txt'

with open(filename, 'r') as input:
   for line in input:
       if 'indicator' in line:
            break

Using with creates a compound statement that ensures that upon entering and leaving the scope of the with statement __enter__() and __exit__() will be called respectively. For the purpose of file reading this will prevent any dangling filehandles.

The break statement tells the loop to terminate immediately.

Mike McMahon
  • 4,739
  • 1
  • 28
  • 39
4

Use iter()'s sentinel parameter:

with open('test.txt') as f:
    for line in iter(lambda: f.readline().rstrip(), 'SPECIFIC LINE'):
        print(line)

output:

file start here..
some data...

Reference: https://docs.python.org/2/library/functions.html#iter

Raymond
  • 1,102
  • 16
  • 19
0

Read only first n lines without loading the whole file:

n = 5
with open(r'C:\Temp\test.txt', encoding='utf8') as f:
    head = [next(f) for x in range(n)]
ZygD
  • 8,011
  • 21
  • 49
  • 67