2011-07-08 14 views
6

Tengo un archivo .txt que he creado con varias líneas.Python 3.2 - readline() está salteando líneas en el archivo fuente

cuando ejecuto un bucle for, con un acumulador de cuenta, omite líneas.

Se salta la línea superior, y comienza con el segundo, imprime la cuarta, la sexta, etc ...

¿Qué es lo que me falta?

** for your reading pleasure** 
def main(): 
    # Open file line_numbers.txt 
    data_file = open('line_numbers.txt', 'r') 

    # initialize accumulatior 
    count = 1 


    # Read all lines in data_file 
    for line in data_file: 
     # Get the data from the file 
     line = data_file.readline() 

     # Display data retrieved 
     print(count, ": ", line) 

     # add to count sequence 
     count += 1 
+0

creo @Shelhammer clavado. Supongo que es obvio que "en" hace una lectura. Bueno, lo hace. – Malvolio

Respuesta

6

Prueba a eliminar por completo "line = data_file.readline()"? Sospecho que "for line in data_file:" también es una operación de lectura.

+0

¿Ahora no se salta, pero está contando líneas en blanco en la salida? así que, en lugar de 1-5, vuelve 1 - 11 –

+0

Nuevamente, ¡perfecto! ¡¡¡Gracias!!! –

6

You for loop está iterando sobre el data_file y su readline() está compitiendo con él. Borrar la línea de su código line = data_file.readline() para este resultado:

# Read all lines in data_file 
count = 1 
for line in data_file: 
    # Display data retrieved 
    print(count, ": ", line) 

    # add to count sequence 
    count += 1 
+0

¡perfecto! ¡Gracias! –

3

for line in data_file ya obtiene el texto de cada línea para usted - la llamada posterior a readline a continuación, obtiene el siguiente línea. En otras palabras, eliminar la llamada a readline hará lo que quiera. Al mismo tiempo, no es necesario hacer un seguimiento de una variable acumulador de sí mismo - Python tiene una forma integrada de hacer esto utilizando enumerate - en otras palabras:

data_file = open('line_numbers.txt', 'r') 
for count, line in enumerate(data_file): 
    ... 
+0

+1 para 'enumerate()' – bernie

+0

Y para la edificación del OP, mejorémoslo aún más usando 'con open ('line_numbers.txt') como data_file:' –

+0

+1 de hecho para enumerate(). No olvide números de cero, por lo que cuando imprime para consumo humano a menudo desea agregar uno al recuento. La mayoría de las personas se sienten más cómodas con la numeración basada en 1. – holdenweb

Cuestiones relacionadas