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/