Re: Tamaño de una archivo

Gerardo Juarez gerardo en computo-industrial.com.mx
Mie Sep 13 02:39:47 CEST 2006


Solo mediante el tipo, ya sea la extension (como hace Windows) o con una 
firma del encabezado o de alguna parte (como lo hace Unix). Esta es la 
razon de que en HTTP tengas que poner un encabezado Content-type, o el 
cliente no sabria que es lo que recibe.

Desde Python, aparentemente un archivo lo lees o escribes en binario o
texto dependiendo de como lo abres (solo Windows) y del los metodos que
uses (read/write o readline/print). El siguiente ejemplo es interesante:

Tengo que regresar un archivo binario via HTTP. Por lo tanto, envio el
Content-type: application/excel (o algo asi, no recuerdo bien el tipo),
una linea en blanco y enseguida el contenido del archivo.

Hago esto:

# header mas linea en blanco
print "Content-type: application/excel\n"
# abro archivo fuente
arch = open(archivo, 'rb')
# envio
while 1:
    data = arch.read(2048)
    if not data: break
    sys.stdout.write(data)
arch.close()

Esto *no* funciona. Me dice efectivamente que si quiero abrir o 
guardar la liga. La bajo, la trato de abrir y me dice que tiene error
el archivo. Notese que print ya manda un \n, por lo que el \n adicional me
genera la linea en blanco, asi es que no este el problema. En cambio, si 
hago esto,

sys.stdout.write("Content-type: application/excel\n\n")
arch = open(archivo, 'rb')
while 1:
    data = arch.read(2048)
    if not data: break
    sys.stdout.write(data)
arch.close()

Funciona perfectamente. write no manda \n nunca, y por eso le pongo dos,
para la linea en blanco. Esto mismo funciona desde un HttpServer tambien, 
en donde hay casos de mezcla de texto y binario (como en una respuesta 
multipart) con imagenes o documentos html o texto plano.

saludos
Gerardo


On Tue, 12 Sep 2006, astralrod wrote:

> ya que estamos con archivos, mediante comandos de programación, ¿como se
> puede saber si un archivo es binario o de texto? (espero que esto no sea
> suicidio programatico...)
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
> 




Más información sobre la lista de distribución Python-es