26.zip打包
# -*- coding: utf-8 -*-
"""使用 Python 在内存中生成 zip 文件"""
import os
import zipfile
import StringIO
import requests
class InMemoryZip(object):
def __init__(self):
# Create the in-memory file-like object
self.in_memory_zip = StringIO.StringIO()
def appendLocalFile(self, file_path, file_name=None):
u"从本地磁盘读取文件,并将其添加到压缩文件中"
if file_name is None:
p, fn = os.path.split(file_path)
else:
fn = file_name
c = open(file_path, "rb").read()
self.append(fn, c)
return self
def appendNetFile(self, url_path, file_name=None):
u"网络文件"
rs = requests.get(url_path)
#with open(file_name, 'wb') as file: # 以byte形式将图片数据写入
# file.write(rs.content)
# file.flush()
#file.close()
self.append(file_name, rs.content)#open(file_name, 'rb').read())
return self
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, "wb")
f.write(self.read())
f.close()
if __name__ == "__main__":
# Run a test
imz = InMemoryZip()
#imz.append("test.txt", "Another test").append("test2.txt", "Still another")
imz.appendNetFile('url', 'file_name.png')
imz.writetofile("test.zip")
http://www.cnblogs.com/makexu/

浙公网安备 33010602011771号