PYTHON如何在內存中生成ZIP文件

如題,代碼如下:

class MemoryZipFile(object):
   def __init__(self):
       #創建內存文件
       self._memory_zip= StringIO.StringIO()
        
   def append_content(self, filename_in_zip, file_content):
       """
       description: 寫文本內容到zip
       """
       zf= zipfile.ZipFile(self._memory_zip,"a", zipfile.ZIP_DEFLATED,False)
       zf.writestr(filename_in_zip, file_content)
       for zfilein zf.filelist: zfile.create_system= 0
       return self
         
   def append_file(self, filename_in_zip, local_file_full_path):
       """

description:寫文件內容到zip

  注意這裏的第二個參數是本地磁盤文件的全路徑(windows:c/demo/1.jpg | linux: /usr/local/test/1.jpg)

  """

  zf = zipfile.ZipFile(self._memory_zip, "a", zipfile.ZIP_DEFLATED, False)

  zf.write(local_file_full_path, filename_in_zip)

  for zfile in zf.filelist: zfile.create_system = 0      

  return self

def read(self):

  """

  description: 讀取zip文件內容

  """

  self._memory_zip.seek(0)

  return self._memory_zip.read()

def write_file(self, filename):

  """

  description:寫zip文件到磁盤

  """

  f = file(filename, "wb")

  f.write(self.read())

  f.close()

使用方法如下:

        mem_zip_file= MemoryZipFile()
        mem_zip_file.append_content('mimetype',"application/epub+zip")
        mem_zip_file.append_content('META-INF/container.xml','''<?xml version="1.0" encoding="UTF-8" ?>
<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container"> </container>''');
        #追加磁盤上的文件內容到內存,注意這裏的第二個參數是本地磁盤文件的全路徑(windows:c/demo/1.jpg | linux: /usr/local/test/1.jpg)
        mem_zip_file.append_file("1.jpg","c:\1.jpg")
  
  
        #將內存中的zip文件寫入磁盤
        mem_zip_file.write_file("c:test.zip")
  
        #獲取內存zip文件內容
        data= mem_zip_file.read()
  
        #上傳到fdfs
        my_fdfs_client.upload_by_buffer(data,'zip')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章