On 19/07/2006 5:34 AM, [EMAIL PROTECTED] wrote: > >> In csv.reader, is there any way of skip lines that start whith '#' or > >> empty lines > > Nope. When we wrote the module we weren't aware of any "spec" that > specified comments or blank lines. You can easily write a file wrapper to > filter them out though: > > class BlankCommentCSVFile: > def __init__(self, fp): > self.fp = fp > > def __iter__(self): > return self > > def next(self): > line = self.fp.next() > if not line.strip() or line[0] == "#": > return self.next()
This is recursive. Unlikely of course, but if the file contained a large number of empty lines, might this not cause the recursion limit to be exceeded? > return line > > Use it like so: > > reader = csv.reader(BlankCommentCSVFile(open("somefile.csv"))) > for row in reader: > print row > Hi Skip, Is there any reason to prefer this approach to Daniel's, apart from being stuck with an older (pre-yield) version of Python? A file given to csv.reader is supposed to be opened with "rb" so that newlines embedded in data fields can be handled properly, and also (according to a post by Andrew MacNamara (IIRC)) for DIY emulation of "rU". It is not apparent how well this all hangs together when a filter is interposed, nor whether there are any special rules about what the filter must/mustn't do. Perhaps a few lines for the docs? Cheers, John -- http://mail.python.org/mailman/listinfo/python-list