Puedes imitar el idioma de C en Python.
Para leer un búfer hasta max_size
número de bytes, puede hacer esto:
with open(filename, 'rb') as f:
while True:
buf = f.read(max_size)
if not buf:
break
process(buf)
O, un archivo de texto línea por línea:
# warning -- not idiomatic Python! See below...
with open(filename, 'rb') as f:
while True:
line = f.readline()
if not line:
break
process(line)
Necesitas usar while True / break
construir ya que hay sin prueba eof en Python que no sea la falta de bytes devueltos por una lectura.
En C, es posible que tenga:
while ((ch != 'n') && (ch != EOF)) {
// read the next ch and add to a buffer
// ..
}
Sin embargo, no puede tener esto en Python:
while (line = f.readline()):
# syntax error
porque no se permiten asignaciones en expresiones en Python (aunque las versiones recientes de Python pueden imitar esto usando expresiones de asignación, ver más abajo).
Es seguramente más idiomático en Python para hacer esto:
# THIS IS IDIOMATIC Python. Do this:
with open('somefile') as f:
for line in f:
process(line)
Actualizar: Desde Python 3.8 también puede usar expresiones de asignación:
while line := f.readline():
process(line)