2009-06-08 20 views
6

Zip dosyası kullanılarak bir sıkıştırılmış html şablonu gibi dinamik olarak oluşturulmuş içerikler arasında bir zip dosyası oluşturabilir miyim?Dinamik dosyaları App Engine (Python) ile sıkıştırılıyor

Statik içeriği sıkıştırmak için bazı örnekler var gibi görünüyor, ancak hiçbiri dinamik olanları sıkıştırmak için yok. Yoksa hiç mümkün değil mi?

Bir soru daha: İçinde bir grup alt klasör bulunan bir zip dosyası oluşturmak mümkün mü?

Teşekkürler. Ayrıca

z.writestr("site/foo/hello/index.html", my_data) 

cevap

7

Schnouki'nin mükemmel yanıtına, ZipFile'yi StringIO.StringIO tarafından oluşturulan gibi bir dosya benzeri nesneyi de geçirebilirsiniz.

+0

Sizler sallandırın! Çok teşekkürler. – checker659

3

:

my_data = "<html><body><p>Hello, world!</p></body></html>" 
z.writestr("hello.html", my_data) 

Ayrıca ayırıcı olarak / (veya os.sep) kullanarak alt klasörler kullanabilirsiniz: Eğer ZipFile.writestr() kullanarak bir zip dosyası istediğini ekleyebilir

+0

Teşekkürler Ryan! _ – checker659

+0

Python 3 kullanıyorsanız, io.BytesIO olması gerekir (StringIO modülü gitti ve zipfile bir bayt arabelleği bekler) –

+1

Hatalar, bunun App Engine hakkında olduğunu anladı. Muhtemelen son yorumumu görmezden gelmelisiniz :), üzgünüm. –

14

çalışma kodu: (app motoru :)

output = StringIO.StringIO() 
z = zipfile.ZipFile(output,'w') 
my_data = "<html><body><p>Hello, world!</p></body></html>" 
z.writestr("hello.html", my_data) 
z.close() 

self.response.headers["Content-Type"] = "multipart/x-zip" 
self.response.headers['Content-Disposition'] = "attachment; filename=test.zip" 
self.response.out.write(output.getvalue()) 

tekrar teşekkürler Schnouki ve Ryan için.