Python leer siguiente ()

next() en python no funciona. ¿Cuál es una alternativa a leer la siguiente línea en Python? Aquí hay una muestra:

 filne = "D:/testtube/testdkanimfilternode.txt" f = open(filne, 'r+') while 1: lines = f.readlines() if not lines: break for line in lines: print line if (line[:5] == "anim "): print 'next() ' ne = f.next() print ' ne ',ne,'\n' break f.close() 

Ejecutar esto en un archivo no muestra ‘ne’.

next() no funciona en su caso porque primero llama a readlines() que básicamente establece que el iterador del archivo apunta al final del archivo.

Ya que estás leyendo en todas las líneas, puedes referirte a la siguiente línea usando un índice:

 filne = "in" with open(filne, 'r+') as f: lines = f.readlines() for i in range(0, len(lines)): line = lines[i] print line if line[:5] == "anim ": ne = lines[i + 1] # you may want to check that i < len(lines) print ' ne ',ne,'\n' break 

Cuando lo haga: f.readlines() ya leyó todo el archivo, por lo que f.tell() le mostrará que está al final del archivo, y al hacer f.next() se producirá un error StopIteration .

Alternativa de lo que quieres hacer es:

 filne = "D:/testtube/testdkanimfilternode.txt" with open(filne, 'r+') as f: for line in f: if line.startswith("anim "): print f.next() # Or use next(f, '') to return  instead of raising a # StopIteration if the last line is also a match. break 
 lines = f.readlines() 

Lee todas las líneas del archivo f. Así que tiene sentido que no haya más líneas para leer en el archivo f. Si desea leer el archivo línea por línea, use readline ().

Un pequeño cambio en tu algoritmo:

 filne = "D:/testtube/testdkanimfilternode.txt" f = open(filne, 'r+') while 1: lines = f.readlines() if not lines: break line_iter= iter(lines) # here for line in line_iter: # and here print line if (line[:5] == "anim "): print 'next() ' ne = line_iter.next() # and here print ' ne ',ne,'\n' break f.close() 

Sin embargo, usando la función de itertools recetas de itertools :

 def pairwise(iterable): "s -> (s0,s1), (s1,s2), (s2, s3), ..." a, b = itertools.tee(iterable) next(b, None) return itertools.izip(a, b) 

puede cambiar su bucle en:

 for line, next_line in pairwise(f): # iterate over the file directly print line if line.startswith("anim "): print 'next() ' print ' ne ', next_line, '\n' break 

No necesitas leer la siguiente línea, estás iterando a través de las líneas. líneas es una lista (una matriz), y para líneas en líneas está iterando sobre ella. Cada vez que terminas con uno, te mueves a la siguiente línea. Si desea saltar a la siguiente línea, simplemente continúe fuera del bucle actual.

 filne = "D:/testtube/testdkanimfilternode.txt" f = open(filne, 'r+') lines = f.readlines() # get all lines as a list (array) # Iterate over each line, printing each line and then move to the next for line in lines: print line f.close()