2011-10-27 27 views
7

Estoy tratando de leer una gran cantidad de líneas de entrada estándar con python.Python: Leer gran cantidad de líneas de stdin

more hugefile.txt | python readstdin.py 

El problema es que el programa se corta tan pronto como he leído una sola línea.

print sys.stdin.read(8) 
exit(1) 

Esto imprime los primeros 8 bytes pero luego espero que finalice pero nunca lo hace. Creo que no es solo leer los primeros bytes, sino intentar leer todo el archivo en la memoria.

mismo problema con sys.stdin.readline()

lo que realmente quiero hacer es, por supuesto, para leer todas las líneas, pero con una memoria intermedia, así que no se quede sin memoria.

estoy usando Python 2.6

+4

¿Por qué utiliza más en vez de gato o incluso una simple redirección de stdin? –

+0

No veo ninguna razón por la cual su programa se "congelará". ¿Cómo estás detectando que se congela? –

+0

Ah, lo estaba ejecutando desde la línea de comandos de Windows. Sin gato en las ventanas. – Martin

Respuesta

11

Esto debería funcionar de manera eficiente en un pitón moderna:

import sys 

for line in sys.stdin: 
    # do something... 
    print line, 

continuación, puede ejecutar el script como el siguiente:

python readstdin.py < hugefile.txt 
+0

¿Cómo está funcionando la memoria aquí? Carga una sola línea a la vez y la elimina del buffer cuando se lee la siguiente línea? Gracias –

+0

Sí, lee una línea a la vez y la establece en la variable de línea. Los valores antiguos de la línea se recuperarán cuando se pierdan. –

Cuestiones relacionadas