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
[email protected]
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a