python2/python3 内存中打包/压缩文件

python2:(包含压缩选项,如果只打包,可以调整zipfile.ZIP_DEFLATED)

import zipfile
import StringIO
class InMemoryZip(object):
    def __init__(self):
        # Create the in-memory file-like object
        self.in_memory_zip = StringIO.StringIO()
    def append(self, filename_in_zip, file_contents):
        ‘‘‘Appends a file with name filename_in_zip and contents of
        file_contents to the in-memory zip.‘‘‘
        # Get a handle to the in-memory zip in append mode
        zf = zipfile.ZipFile(self.in_memory_zip, "a", zipfile.ZIP_DEFLATED, False)
        # Write the file to the in-memory zip
        zf.writestr(filename_in_zip, file_contents)
        # Mark the files as having been created on Windows so that
        # Unix permissions are not inferred as 0000
        for zfile in zf.filelist:
            zfile.create_system = 0
        return self
    def read(self):
        ‘‘‘Returns a string with the contents of the in-memory zip.‘‘‘
        self.in_memory_zip.seek(0)
        return self.in_memory_zip.read()
    def writetofile(self, filename):
        ‘‘‘Writes the in-memory zip to a file.‘‘‘
        f = file(filename, "w")
        f.write(self.read())
        f.close()
if __name__ == "__main__":
    # Run a test
    imz = InMemoryZip()
    imz.append("/home/test/1.jpg",imagebuf)
    imz.writetofile("test.zip")

  python3:(包含打包选项,不压缩)

import zipfile
import io
class InMemoryZip(object):
    def __init__(self):
        self.in_memory_zip = io.BytesIO()
    def append(self, filename_in_zip, file_contents):
        zf = zipfile.ZipFile(self.in_memory_zip, "a", zipfile.ZIP_STORED, False)
        zf.writestr(filename_in_zip, file_contents)
        for zfile in zf.filelist:
            zfile.create_system = 0
        return self
    def read1(self):
        self.in_memory_zip.seek(0)
        return self.in_memory_zip.read()
    def writetofile(self, filename):
        f = open(filename, "wb")
        f.write(self.read1())
        f.close()
if __name__ == "__main__":

    imz = InMemoryZip()
    f1 = open(‘/home/yangbing/jpg/1.jpg‘,‘rb‘).read()
    imz.append("1.jpg", f1)
    f2 = open(‘/home/yangbing/jpg/2.jpg‘,‘rb‘).read()
    imz.append("2.jpg",f2)
    imz.writetofile("test.zip")

  

时间: 2024-08-24 09:35:10

python2/python3 内存中打包/压缩文件的相关文章

IDA远程调试 在内存中dump Dex文件

1. 首先使用调试JNI_OnLoad函数的方法,先将apk以调试状态挂起,使用IDA附加上去. 2. 然后在libdvm.so中的dvmDexFileOpenPartial函数上下一个断点 3. 然后我们点击继续运行,程序就会在dvmDexFileOpenPartial()这个函数处暂停,R0寄存器指向的地址就是dex文件在内存中的地址,R1寄存器就是dex文件的大小 4. 然后我们就可以使用ida的script command去dump内存中的dex文件了. static main(void

在内存中dump Dex文件

在现在的移动安全环境中,程序加壳已经成为家常便饭了,如果不会脱壳简直没法在破解界混的节奏.ZJDroid作为一种万能脱壳器是非常好用的,但是当作者公开发布这个项目后就遭到了各种加壳器的针对,比如说抢占ZJDroid的广播接收器让ZJDroid无法接收命令等.我们也会在”安卓动态调试七种武器之多情环 - Customized DVM”这篇文章中介绍另一种架构的万能脱壳器.但工具就是工具,当我们发布的时候可能也会遭到类似ZJDroid那样的针对.所以说手动脱壳这项技能还是需要学习的.在这一节中我们会

怎么在Beyond Compare中同步压缩文件夹

Beyond Compare 4 中文版作为一款功能强大范围广泛的文件对比工具,在使用过程中你会发现它有很多非常贴心便捷的功能.比如其在对比文件夹的过程中,如果你需要把文件夹压缩,那么你在对比的过程中,可以同步的压缩文件夹.下面本教程就来给大家介绍介绍怎么在Beyond Compare中同步压缩文件夹? 原文:http://www.beyondcompare.cc/jiqiao/yasuo-wenjianjia.html 具体操作步骤如下所示 步骤一:打开Beyond Compare软件,选择文

net 编译报错:编辑器或项目正在尝试签出在内存中修改的文件,这将导致保存该文件

1,报错提示: 编辑器或项目正在尝试签出在内存中修改的文件,这将导致保存该文件. 在生成过程中保存文件是危险的,这可能会在将来导致不正确的生成输出. 是否仍然继续签出? 2,原因:licenses.licx属性设为了只读. 3,解决: a,搜索''licenses.licx',去掉只读属性; b,LicensesClear.exe放到项目根目录下,双击执行. 递归取消licenses.licx只读属性,源码 原文地址:https://www.cnblogs.com/qqhfeng/p/92947

java打包压缩文件

package com.it.simple.util; import java.io.BufferedOutputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.OutputStream;import

打包压缩文件命令

命令 参数 说明 -------------------------------------------------------------------------------- tar 用于对文件打包压缩或解压 打包并压缩文件 tar -czvf 压缩包名.tar.gz -c 打包文件 解压并展开压缩包 tar -xzvf 压缩包.tar.gz -x 解开压缩文件 -t 查看压缩文件内有哪些文件 -z 用Gzip压缩或解压 -j 用bzip2压缩或解压 -v 显示压缩或解压的过程 -f 目标文

tar -- 打包压缩文件

先看一个例子: 1.将当前目录下所有.txt文件打包并压缩归档到文件this.tar.gz,我们可以使用 tar zcvf this.tar.gz ./*.txt 2.将当前目录下的this.tar.gz中的文件解压到当前目录我们可以使用 tar xzvf this.tar.gz ./ 下面介绍几个重要的参数: (一)打包部分参数      tar [-] A --catenate --concatenate | c --create | d --diff --compare | --delet

r.js 打包压缩文件(依赖require)

r.js是requireJS的优化(Optimizer)工具,可以实现前端文件的压缩与合并,在requireJS异步按需加载的基础上进一步提供前端优化,减小前端文件大小.减少对服务器的文件请求. 要使用r.js需下载r.js文件( 点我下载 ),将其放到你的项目根目录:还需要安装nodeJS(点我下载),以便通过命令行来执行r.js功能. 下面是我项目 幸福来敲门的目录结构.从index.html结构的data-mian可以看出模块的入口是app.js. app.js里面是这样一小段代码: 注释

ThinkPHP框架下如何用PHP自带的ZipArchive类打包压缩文件

public function downloadzip(){ $catid = $this->request->param('catid/d', 0); $id = $this->request->param('id/d', 0); $category = getCategory($catid); if (empty($category)) { $this->error('该栏目不存在!'); } $modelid = $category['modelid']; $field