Iterate over text file, discarding some lines via context manager
davea at davea.name
Fri Nov 28 18:40:38 CET 2014
Please don't start a new thread when responding to an existing topic.
Just reply-List to the message you're responding to, and include some
context from that message.
On 11/28/2014 12:06 PM, ast wrote:
> 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
> 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="")
Why would you prefer that over a generator function, as given earlier in
the thread? See for example Ned's message. By using 'yield', you get
Python to generate all the class boilerplate for you.
More information about the Python-list