[Python-es] zipfile Buffered

Andrey Antoukh andsux en gmail.com
Mar Ene 25 01:25:24 CET 2011


He estado mirando el código de la implementación de zipfile de python3
y sinceramente, no se si habrá alguna manera simple de implementar la
escritura de un stream, tal como lo planteas.
Sin embargo con gzip eso cambia, pero supongo que no es el caso que interese.
Siento no ser de mucha mas ayuda.

Un saludo.
Andrei.

El día 24 de enero de 2011 23:29, Juan de Dios Manjón Pérez
<juande en jdmanjon.net> escribió:
> Andrey,
>
> también he llegado al punto que comentas,
> el problema que tengo ahora es para escribir el chuck, ya que
> ZipFile.open(name, mode='r', pwd=None) no admite mode='w'.
>
> El unico metodo ZipFile.writestr(zinfo_or_arcname, bytes) que he encontrado
> para escribir requiere que se escriba TODO de golpe.
>
> La implementación que busco es parecida a:
>
> from zipfile import ZipFile
> from shutil import copyfileobj
>
> def copyZipFile(source, target):
>     zsource = ZipFile(source,"r")
>     ztarget = ZipFile(target,"w")
>
>     for item in zsource.infolist():
>         fsrc = zsource.open(item.filename,"r")
>         fdst = ztarget.open(item.filename,"w") #mode no acepta "w".
> exception
>         copyfileobj(fsrc,fdst)
>         fdst.close()
>         fsrc.close()
>
>     zsource.close()
>     ztarget.close()
>
>
> Saludos
>
> Juande
>
>
>
> El 24/01/2011 20:14, Andrey Antoukh escribió:
>
> http://docs.python.org/py3k/library/zipfile.html
>
> ZipFile.open(name, mode='r', pwd=None)
> Extract a member from the archive as a file-like object (ZipExtFile). name
> is the name of the file in the archive, or a ZipInfo object. The mode
> parameter, if included, must be one of the following: 'r' (the default),
> 'U', or 'rU'. Choosing 'U' or 'rU' will enable universal newline support in
> the read-only object. pwd is the password used for encrypted files. Calling
> open() on a closed ZipFile will raise a RuntimeError.
>
> Note The file-like object is read-only and provides the following methods:
> read(), readline(), readlines(), __iter__(), __next__().
>
> Lo que a groso modo quiere decir que devuelve un objeto fichero que tiene
> todos los métodos estándares para leer. De lo que se deduce que podemos
> leerlos a cachitos para que no ocupe memoria.
>
> La implementación seria parecida a la que ya se ha propuesto.  O como el
> simple ejemplo...
>
>>>> zipobj = zipfile.ZipFile("prueba.zip", "r")
>>>> for zip in zipobj.namelist():
> ...     zipfileobj = zipobj.open(zip, "r")
> ...     for chuck in zipfileobj:
> ...         # lo que sea que tengas que hacer con estos datos.
>
> Un saludo.
>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>



-- 
http://twitter.com/andsux
http://www.niwi.be
****
http://www.freebsd.org/
http://www.postgresql.org/
http://www.python.org/
http://www.djangoproject.com/

"Linux is for people who hate Windows, BSD is for people who love UNIX"
"Social Engineer -> Because there is no patch for human stupidity"


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