我需要在数据存储中压缩一组blob。 这些可以是不同类型的,如一些html / images / swf /等。 其中所有这些在数据存储区中都可用作blob。
我尝试实施此解决方案: Zipping dynamic files in App Engine (Python)?
尝试使用一些非常好的静态文本,我也能够创建一个包含各自内容的文件的zip文件,但是在查询中输入zip时我无法找出一些问题。
z.writestr(fil.Template_name, my_data.encode('UTF-8'))
File "C:\Python25\lib\zipfile.py", line 626, in writestr
self.fp.write(zinfo.FileHeader())
File "C:\Python25\lib\zipfile.py", line 260, in FileHeader
return header + self.filename + extra
UnicodeDecodeError: 'ascii' codec can't decode byte 0xde in position 12: ordinal not in range(128)
这是代码的这部分错误
class filesDB(db.model)
Template_file = db.BlobProperty()
Template_name= db.StringProperty()
output = StringIO.StringIO()
z = zipfile.ZipFile(output,'w')
files = filesDB.all().filter("fCreatedBy","sandeep")
for fil in files:
my_data = fil.Template_file
z.writestr(fil.Template_name, my_data)
z.close()
答案 0 :(得分:3)
根据zipfile文档:
ZIP文件没有正式的文件名编码 如果您有unicode文件名,则必须先将它们转换为所需编码的字节字符串,然后再将它们传递给write()。
尝试使用UTF-8编码您的文件名,例如:
class filesDB(db.model)
Template_file = db.BlobProperty()
Template_name= db.StringProperty()
output = StringIO.StringIO()
z = zipfile.ZipFile(output,'w')
files = filesDB.all().filter("fCreatedBy","sandeep")
for fil in files:
my_data = fil.Template_file
z.writestr(fil.Template_name.encode('utf-8'), my_data)
z.close()