In article <2f08e970-1334-4e7f-ba84-14869708a...@googlegroups.com>, Leonardo Petry <leonardo.petry...@gmail.com> wrote:
> Basically my question is: Why is python not treating the contents of > [a file] as one long string and looping each character? Because whoever designed the original file object decided that the right way to iterate over a file is line by line. In Python (although, at this level of explanation, I could be describing pretty much any language which has iterators), there is an iterator protocol which implements two ideas: 1) There's a method to call to get the next item. 2) There's a way for that method to signal that you've reached the end. Exactly what "the next item" means is up to whoever implements the iterator. In this case, it was decided that the most convenient thing would be for "item" to mean "line". If you really want to iterate over a file character-by-character, it's easy enough to write an adapter. Something like this (untested): def getchar(f): for line in f: for c in line: yield c Of course, if the native file iterator was character-by-character, then if you wanted it line-by-line, you would have to write the inverse, a function which accumulates characters until it sees a newline, and then returns that. Neither one is fundamentally better, or more correct than the other. One may just be more convenient for a particular use case. -- https://mail.python.org/mailman/listinfo/python-list