基本的に以下を参照。 * #43 pythonでメモリ上でzipに書き込む。 * #44 pythonでメモリ上にzipを作る。 ただ、Python2.5でzip_raw_writeが動かないので、以下と差し替えてください。 {{{ #!python def zip_raw_write(zip_file, zinfo_or_arcname, obj): """Write a file into the archive. The contents is the string 'obj'. 'zinfo_or_arcname' is either a ZipInfo instance or the name of the file in the archive.""" from zipfile import ZipInfo, ZIP_DEFLATED import time if not isinstance(zinfo_or_arcname, ZipInfo): zinfo = ZipInfo(filename=zinfo_or_arcname, date_time=time.localtime(time.time())[:6]) zinfo.compress_type = zip_file.compression else: zinfo = zinfo_or_arcname read_obj = obj.read() zinfo.file_size = len(read_obj) zinfo.header_offset = zip_file.fp.tell() zip_file._writecheck(zinfo) zip_file._didModify = True zinfo.file_size = obj.tell() # Uncompressed size import binascii zinfo.CRC = binascii.crc32(read_obj) # CRC-32 checksum if zinfo.compress_type == ZIP_DEFLATED: import zlib co = zlib.compressobj(zlib.Z_DEFAULT_COMPRESSION, zlib.DEFLATED, -15) read_obj = co.compress(read_obj) + co.flush() zinfo.compress_size = len(read_obj) # Compressed size else: zinfo.compress_size = zinfo.file_size zinfo.header_offset = zip_file.fp.tell() # Start of header obj zip_file.fp.write(zinfo.FileHeader()) zip_file.fp.write(read_obj) zip_file.fp.flush() if zinfo.flag_bits & 0x08: # Write CRC and file sizes after the file data zip_file.fp.write(struct.pack("