con - copiar archivos python




¿Cómo puedo comprimir el contenido de una carpeta usando Python(versión 2.5)? (2)

Aquí hay una versión recursiva

def zipfolder(path, relname, archive):
    paths = os.listdir(path)
    for p in paths:
        p1 = os.path.join(path, p) 
        p2 = os.path.join(relname, p)
        if os.path.isdir(p1): 
            zipfolder(p1, p2, archive)
        else:
            archive.write(p1, p2) 

def create_zip(path, relname, archname):
    archive = zipfile.ZipFile(archname, "w", zipfile.ZIP_DEFLATED)
    if os.path.isdir(path):
        zipfolder(path, relname, archive)
    else:
        archive.write(path, relname)
    archive.close()

Una vez que tengo todos los archivos que necesito en una carpeta en particular, me gustaría que mi secuencia de comandos python comprima el contenido de la carpeta.

es posible?

¿Y cómo podría hacerlo?


La versión adaptada del script es:

#!/usr/bin/env python
from __future__ import with_statement
from contextlib import closing
from zipfile import ZipFile, ZIP_DEFLATED
import os

def zipdir(basedir, archivename):
    assert os.path.isdir(basedir)
    with closing(ZipFile(archivename, "w", ZIP_DEFLATED)) as z:
        for root, dirs, files in os.walk(basedir):
            #NOTE: ignore empty directories
            for fn in files:
                absfn = os.path.join(root, fn)
                zfn = absfn[len(basedir)+len(os.sep):] #XXX: relative path
                z.write(absfn, zfn)

if __name__ == '__main__':
    import sys
    basedir = sys.argv[1]
    archivename = sys.argv[2]
    zipdir(basedir, archivename)

Ejemplo:

C:\zipdir> python -mzipdir c:\tmp\test test.zip

Crea 'C:\zipdir\test.zip' archivo 'C:\zipdir\test.zip' con el contenido del directorio 'c:\tmp\test' .





python-2.5