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'.
5 respuestas
next()
no funciona en su caso porque primero llama a readlines()
que básicamente establece el iterador de archivo para que apunte al final del archivo.
Como está leyendo en todas las líneas de todos modos, puede consultar la siguiente línea utilizando 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
Un pequeño cambio en su 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, utilizando la función pairwise
de itertools
recetas :
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = itertools.tee(iterable)
next(b, None)
return itertools.izip(a, b)
Puedes cambiar tu ciclo a:
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
Cuando lo haga: f.readlines()
ya ha leído todo el archivo, por lo que f.tell()
le mostrará que está al final del archivo, y al hacer f.next()
se obtendrá un StopIteration
error.
La 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 <empty string> instead of raising a
# StopIteration if the last line is also a match.
break
No necesita leer la siguiente línea, está iterando a través de las líneas. líneas es una lista (una matriz), y para línea en línea está iterando sobre ella. Cada vez que termine con uno, pasa a la línea siguiente. Si desea pasar a la siguiente línea, simplemente continuar fuera del ciclo 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()
lines = f.readlines()
Lee todas las líneas del archivo f. Por lo tanto, 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 ().
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.