Search code examples
pythonfileiterationeof

What is the perfect counterpart in Python for "while not EOF"


To read some text file, in C or Pascal, I always use the following snippets to read the data until EOF:

while not eof do begin
  readline(a);
  do_something;
end;

Thus, I wonder how can I do this simple and fast in Python?


Solution

  • Loop over the file to read lines:

    with open('somefile') as openfileobject:
        for line in openfileobject:
            do_something()
    

    File objects are iterable and yield lines until EOF. Using the file object as an iterable uses a buffer to ensure performant reads.

    You can do the same with the stdin (no need to use raw_input():

    import sys
    
    for line in sys.stdin:
        do_something()
    

    To complete the picture, binary reads can be done with:

    from functools import partial
    
    with open('somefile', 'rb') as openfileobject:
        for chunk in iter(partial(openfileobject.read, 1024), b''):
            do_something()
    

    where chunk will contain up to 1024 bytes at a time from the file, and iteration stops when openfileobject.read(1024) starts returning empty byte strings.