zipfile module

Skip Montanaro skip at pobox.com
Thu Oct 23 14:44:42 EDT 2003


    lco> dynamite4_db_archive.py", line 45, in ?
    lco> file.write(name, os.path.basename(name), zipfile.ZIP_DEFLATED)
    lco> File "C:\Python22\lib\zipfile.py", line 426, in write
    lco> zinfo.file_size))
    lco> OverflowError: long int too large to convert to int

    ...

    lco>        for name in glob.glob(file_to_zip):
    lco>                file.write(name, os.path.basename(name), zipfile.ZIP_DEFLATED)

How about you write the file in chunks?  I'm not familiar with the zipfile
module, but it looks like writestr will do the job for you.  My guess is
something like

    ...
    file = zipfile.ZipFile(destination, "w", zipfile.ZIP_DEFLATE)
    for name in glob.glob(file_to_zip):
        ...
        f = open(name)
        data = f.read(8192)
        while data:
            file.writestr(os.path.basename(name), data)
            data = f.read(8192)
        f.close()
    file.close()

might do the trick.  (The zipfile module's interface to writing data looks a
bit odd to me.)

Skip





More information about the Python-list mailing list