Test Foro de elhacker.net SMF 2.1

Programación => Scripting => Mensaje iniciado por: Carloswaldo en 5 Enero 2010, 00:08 AM

Título: Escribiendo strings en archivos (python 2.6)
Publicado por: Carloswaldo en 5 Enero 2010, 00:08 AM
Bien pues tengo un código bastante simple, más o menos así:

Código (python) [Seleccionar]
import urllib
a="http://diveintopython.org/html_processing/extracting_data.html"
#Abrimos la url
f = urllib.urlopen(a)
s = f.read(10000)
#Escribimos el resultado en un archivo
log_file = open("log.txt", "w+" ,10000)
log_file.write(s)
f.close()
raw_input()


Lo que hace es obtener el html de la url y guardarlo en un txt, o al menos eso es lo que debería hacer. El problema es que al ejecutar el script efectivamente se crea el archivo .txt pero solo se guarda una parte del html, y solo se guardará completo cuando se termine de ejecutar el script. Buscando he encontrado esto:

http://docs.python.org/library/stdtypes.html#file.write

Citarfile.write(str)
    Write a string to the file. There is no return value. Due to buffering, the string may not actually show up in the file until the flush() or close() method is called.

El .close() lo tengo y aún agregando un .flush() antes del .close() no me da los resultados que deseo. ¿Alguien sabe como puedo solucionar esto?
Título: Re: Escribiendo strings en archivos (python 2.6)
Publicado por: Novlucker en 5 Enero 2010, 00:15 AM
Probaste sin usar buffer?

Código (python) [Seleccionar]
s = f.read()
#Escribimos el resultado en un archivo
log_file = open("log.txt", "w+")


Saludos
Título: Re: Escribiendo strings en archivos (python 2.6)
Publicado por: CaronteGold en 5 Enero 2010, 00:48 AM
Cita de: Novlucker en  5 Enero 2010, 00:15 AM
Probaste sin usar buffer?

Código (python) [Seleccionar]
s = f.read()
#Escribimos el resultado en un archivo
log_file = open("log.txt", "w+")


Saludos


  Si quitas el buffer, y haces print a " s ", se ve todo, pero luego al escribirlo en un .txt, aparece hasta poco antes del final, pero quedan lineas sin terminar...

  EDITO:


Ya sé por qué es, tienes que cerrar tambien log_file, quedando  log_file.close()

  Saludos.
Título: Re: Escribiendo strings en archivos (python 2.6)
Publicado por: Carloswaldo en 5 Enero 2010, 04:07 AM
Cita de: Novlucker en  5 Enero 2010, 00:15 AM
Probaste sin usar buffer?

Código (python) [Seleccionar]
s = f.read()
#Escribimos el resultado en un archivo
log_file = open("log.txt", "w+")


Saludos

Sí, de hecho ese fue mi código original, pensé que indicando el número de bytes arreglaría el problema pero no fue así.

Cita de: CaronteGold en  5 Enero 2010, 00:48 AM
Ya sé por qué es, tienes que cerrar tambien log_file, quedando  log_file.close()

Funcionó perfecto. Gracias :D
Título: Re: Escribiendo strings en archivos (python 2.6)
Publicado por: Novlucker en 5 Enero 2010, 04:12 AM
Cita de: Carloswaldo en  5 Enero 2010, 04:07 AM
Cita de: CaronteGold en  5 Enero 2010, 00:48 AM
Ya sé por qué es, tienes que cerrar tambien log_file, quedando  log_file.close()
Funcionó perfecto. Gracias :D

Que ya no tenías el close()?, era justamente lo que ponía en la documentación oficial

Cita de: Carloswaldo en  5 Enero 2010, 00:08 AM
Citarfile.write(str)
    Write a string to the file. There is no return value. Due to buffering, the string may not actually show up in the file until the flush() or close() method is called.
El .close() lo tengo y aún agregando un .flush() antes del .close() no me da los resultados que deseo. ¿Alguien sabe como puedo solucionar esto?
Título: Re: Escribiendo strings en archivos (python 2.6)
Publicado por: Carloswaldo en 5 Enero 2010, 04:13 AM
Solo tenía el f.close(), me olvidé que también tenía que hacer log_file.close() :xD
Título: Re: Escribiendo strings en archivos (python 2.6)
Publicado por: Novlucker en 5 Enero 2010, 04:19 AM
:xD ...

... tampoco esta de más decir que el importante es el file.close(), el de urllib se va a cerrar de cualquier manera, pero el file puede quedar bloqueado y no permitir acceder posteriormente :-\

Y bueno, solucionado entonces ....

Saludos
Título: Re: Escribiendo strings en archivos (python 2.6)
Publicado por: Carloswaldo en 5 Enero 2010, 04:28 AM
Sip, a veces me trabo en tonterías xD Gracias a los 2.