zoukankan      html  css  js  c++  java
  • Python: 使用zipfile+io模块在内存中进行zip操作

    #!/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'
    '),
                                (b'
', b'
    ')):
            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)
    
  • 相关阅读:
    数据准备2 数据清洗
    数据准备1 数据导入、导出
    数据分析基本流程 Python基本数据类型 Python各种括号的使用方式
    fineBI 学习成果展示1
    未确认融资收益的计算
    合同现金流量
    公允价值持续计算的金额
    发放股票股利
    权益法未实现内部交易损益的调整
    营业外收入入不入损益
  • 原文地址:https://www.cnblogs.com/yaoyu126/p/3700593.html
Copyright © 2011-2022 走看看