Python – Sólo la última línea se guarda en el archivo

Estoy tratando de mostrar el resultado de mi script en un archivo de texto. El script funciona bien, el único problema es cuando los resultados se guardan en el archivo de texto (output.txt), solo se guarda la última línea, no todo. No estoy seguro de lo que estoy haciendo mal aquí. Cualquier sugerencia será apreciada.

¡Animar!

try: if 'notavailable' not in requests.get('url' + str(service) + '&username=' + str(username), headers={'X-Requested-With': 'XMLHttpRequest'}).text: result = service + '\t' + " > " + username + " > " 'Available' print result f = open("output.txt", "w") f.write(result + "\n") f.close() else: print service + '\t' + " > " + username + " > " 'Not Available' except Exception as e: print e 

necesitas escribir

 f = open("output.txt", "a") 

Esto agregará el archivo, en lugar de escribir sobre cualquier otra cosa que pongas en él.

En cada iteración está abriendo el archivo, borrando su contenido, escribiendo y cerrando. Es mucho mejor abrirlo solo una vez:

 f = open('output.txt', 'w') # do loop f.write(stuff) f.close() 

O, mucho mejor:

 with open('output.txt', 'w') as f: while loop: f.write(stuff) 

Este método no solo es más limpio, sino que también funciona mucho mejor, ya que puede almacenar en caché el contenido del archivo y usar la cantidad mínima de llamadas del sistema operativo.

Voy a hacer una suposición descabellada y asumir que todo este código ocurre dentro de un bucle. Cada vez que recorre el bucle, escribe una línea más, pero al final, solo tiene la última línea.

Si ese es el problema, aquí está el problema:

  f = open("output.txt", "w") 

Cuando abres un archivo en modo 'w' , eso trunca cualquier archivo existente.

Para solucionar esto, abra el archivo una vez, fuera del bucle, en lugar de repetirlo una y otra vez, o ábralo en 'a' modo 'a' o 'r+' o en algún otro modo que no trunca el archivo.

La documentación para la función de open , o la ayuda en línea en el intérprete interactivo, explica lo que significan los diferentes modos.

¿Probó con el parámetro ‘a’? Entonces: f = abierto (“output.txt”, “a”)

Eso abrirá el archivo con el puntero al final. http://www.pythonforbeginners.com/files/reading-and-writing-files-in-python