On Mon, May 3, 2010 at 1:49 AM, Stefan Behnel <stefan...@behnel.de> wrote: > > You are modifying the list during iteration, so the size changes and the > iterator gets diverted. Don't remove the line, just skip over it, e.g. > > def read_package_names(open_text_file): > """Read lines, strip any comments and return only the > package names found. > """ > for line in open_text_file: > if '%' in line: > # take only the part before the '%' > line = line.split('%', 1)[0] > line = line.strip() > if line: > yield line
And here if you wanted all the text on the line before the first '%' as a list comprehension it would be something like this: lines = [line[:line.index('%')] for line in lines if not line.strip().startswith('%')] > > with open('packages.txt') as f: > for package_name in read_package_names(f): > print package_name > What's this bizarre syntax? I thought they changed for loop interations so that if you did for line in open('packages.txt'): .... etc... it would automatically close the file handle after the loop terminated. Have I been wrong this whole time? -Luke _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor