#!/usr/bin/env python
#coding=utf-8
'''
版权所有 (c) 2014 yao_yu (http://blog.csdn.net/yao_yu_126)
本代码采用MIT许可
使用io.BytesIO()在内存中压缩,解压缩zip文件
2014-04-30 yaoyu 创建
''' import zipfile
import os
import io
from base64 import standard_b64decode
try:
from .yy_file import *
except:
from yy_file import * __all__ = ['yy_zip_files2buffer', 'yy_zip_files', 'yy_unzip_buffer2files', 'yy_unzip_base64zipfile'] def yy_zip_files2buffer(files):
'''文件压缩到内存中'''
buffer = io.BytesIO()
zfile = zipfile.ZipFile(buffer, 'w', zipfile.ZIP_DEFLATED, allowZip64=False)
for i in files:
if os.path.isfile(i):
zfile.write(i, os.path.basename(i))
zfile.close()
buffer.seek(0)
return buffer def yy_zip_files(zipfilename, files):
'''压缩文件列表到zip文件'''
yy_file_write_bytes(zipfilename, yy_zip_files2buffer(files).read()) def yy_unzip_buffer2files(buffer):
'''从内存压缩文件中读取文件信息'''
zfile = zipfile.ZipFile(buffer, 'r')
files = []
for i in zfile.filelist:
files.append((i.filename, zfile.read(i.filename)))
return files def yy_unzip_base64zipfile(szFile):
'''从base64压缩的zip文件中读取第一个文件二进制内容'''
bytescontent = yy_file_read_bytes(szFile)
for (find, replace) in ((b' ', b'\n'),
(b' ', b'\r')):
if find in bytescontent:
bytescontent = bytescontent.replace(find, replace)
filebytes = standard_b64decode(bytescontent)
fileinfos = yy_unzip_buffer2files(io.BytesIO(filebytes))
if fileinfos:
return fileinfos[0][1] if __name__ == '__main__':
sourcedir = '/Volumes/Data/Document/百度云同步盘/Develop/Python/Calculator'
files = (os.path.join(sourcedir, i) for i in os.listdir(sourcedir))
yy_zip_files(os.path.join(sourcedir, 'dist', 'r.zip'), files)
#print(yy_unzip_buffer2files(yy_zip_files2buffer(files))) filename = '/Volumes/Data/Download/aaa'
filebytes = yy_unzip_base64zipfile(filename)
yy_file_write_bytes(filename + '.xls', filebytes)

Python: 使用zipfile+io模块在内存中进行zip操作的更多相关文章

  1. C# 图像处理:复制屏幕到内存中,拷屏操作

    /// <summary> /// 复制屏幕到内存中 /// </summary> /// <returns>返回内存流</returns> publi ...

  2. python的异步IO模块

    asyncio模块:示例一 import asyncio @asyncio.coroutine def func1(): print('before...func1......') yield fro ...

  3. python学习之io模块

    class io.BytesIO([initial_bytes]) 他是一个_io.BytesIO对象. 用这个类的实例可以操作内存缓冲区中的字节流. >>> s = 'hello' ...

  4. python深浅拷贝以及数据在内存中储存方法

    要搞懂深浅拷贝,首先要明白数据在内存里的储存方法. 一个变量的储存,首先是变量名加上储存内容的ID,通过ID去找到变量名所对应的内容, 当我们对数据进行赋值时,其实是把内容的整体地址赋给别的变量名(相 ...

  5. python基础学习笔记——模块

    自定义模块 我们今天来学习一下自定义模块(也就是私人订制),我们要自定义模块,首先就要知道什么是模块啊 一个函数封装一个功能,比如现在有一个软件,不可能将所有程序都写入一个文件,所以咱们应该分文件,组 ...

  6. python多线程与_thread模块

    进程与线程 1.进程:计算机程序只是存储在磁盘中的可执行二进制(或其他类型)的文件.只有把他们加载到内存中并被操作系统调用,才具有其生命周期.进程则是一个执行中的程序.每个进程都拥有自己的地址空间,内 ...

  7. SQL Server 内存中OLTP内部机制概述(三)

    ----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<SQL Server In-Memory ...

  8. Python从内存中使用编译后的模块

    在Windows编程的时候,有些时候,我们经常会要使用一些非常规的方法,比如说从内存中加载DLL,然后使用DLL中的函数.于是就思索在用Python的时候是否能够将几个编译好的Pyc合并成一个,然后使 ...

  9. {Python之线程} 一 背景知识 二 线程与进程的关系 三 线程的特点 四 线程的实际应用场景 五 内存中的线程 六 用户级线程和内核级线程(了解) 七 python与线程 八 Threading模块 九 锁 十 信号量 十一 事件Event 十二 条件Condition(了解) 十三 定时器

    Python之线程 线程 本节目录 一 背景知识 二 线程与进程的关系 三 线程的特点 四 线程的实际应用场景 五 内存中的线程 六 用户级线程和内核级线程(了解) 七 python与线程 八 Thr ...

随机推荐

  1. GWT用frame调用JSP

    Frame htmlFrame = new Frame("../OurHome/modules/core/mainIndex.jsp?merchantId="+merchantId ...

  2. centos中使用python遇到的几个问题

    用python搞了一个从excel中读取cobbler节点信息并加入cobbler中的脚本,运行的过程中出了不少问题,这里记录下来,方便日后查找! 一.yum install python,我通过这个 ...

  3. hdu 4634 Swipe Bo 搜索

    典型的bfs模拟 (广度优先搜索) ,不过有好多细节要注意,比如图中如果是  R#  走到这个R的话就无限往右走了,这样就挂了~肯定到不了出口.还有一种容易造成死循环的,比如 #E## DLLL D. ...

  4. 80端口被system占用的问题

    80端口被system占用的问题今天启动Apache的时候发现无法启动-80端口被占用. 检查进程发现是system进程id=4给占用了.这个是系统进程 检查服务,看看IIS.没发现问题. 检查了半天 ...

  5. hdu 3586 Information Disturbing(树形dp + 二分)

    本文出自   http://blog.csdn.net/shuangde800 题目链接:   hdu-3586 题意 给一棵n个节点的树,节点编号为1-n,根节点为1.每条边有权值,砍掉一条边要花费 ...

  6. Java基础知识强化之集合框架笔记57:Map集合之HashMap集合(HashMap<Student,String>)的案例

    1. HashMap集合(HashMap<Student,String>)的案例 HashMap<Student,String>键:Student      要求:如果两个对象 ...

  7. Ext信息提示对话框

    Ext.window.MessageBox是一个工具类,他继承自Ext.window.Windoe对象,用来生成各种风格的信息提示对话框,其实例对象可以通过Ext.MessageBox或Ext.Msg ...

  8. Mybatis下配置调用Oracle自定义函数返回的游标结果集

    在ibatis和Mybatis对存储过程和函数函数的调用的配置Xml是不一样的,以下是针对Mybatis 3.2的环境进行操作的. 第一步配置Mapper的xml内容 <mapper names ...

  9. 复旦大学2016--2017学年第一学期高等代数I期末考试情况分析

    一.期末考试成绩班级前十名 宁盛臻(100).朱民哲(92).徐钰伦(86).范凌虎(85).沈伊南(84).何陶然(84).丁知愚(83).焦思邈(83).董瀚泽(82).钱信(81) 二.总成绩计 ...

  10. 第二篇:web之前端之css

    前端之css   前端之css 本节内容 css概述及引入 css选择器 css常用属性 1.css概述及引入 CSS概述 CSS是Cascading Style Sheets的简称,中文称为层叠样式 ...