Iterate over text file, discarding some lines via context manager

ast nomail at invalid.com
Fri Nov 28 12:06:02 EST 2014


Hi

Here is a solution with a custom iterator which operate on files.
I tested it with a small file. Just a remark, there are no empty line
on a file, there is at least '\n' at the end of each lines but maybe the 
last one. If readline() got an emptyline, then the end of file has been 
reached.


class MyFileItr:
    
    def __init__(self, f):
        self.f = f
        self.line = ""

    def __next__(self):

        while True:
            
            self.line = self.f.readline()

            if (self.line == ''):
                raise StopIteration
       
            if not(self.line.startswith('#') or self.line.isspace() or self.line == '\n'):
                
                return self.line

    def __iter__(self):
        return self


        
f = open('test.txt', 'r')

for L in MyFileItr(f):
    print(L, end="")




More information about the Python-list mailing list