2011-11-09 5 views
5

Interfejs API Pythona ZipFile wydaje się zezwalać na przekazywanie ścieżki pliku do ZipFile.write lub ciąg bajta na ZipFile.writestr, ale nic pomiędzy. Chciałbym móc przekazać obiekt podobny do pliku, w tym przypadku obiekt django.core.files.storage.DefaultStorage, ale w zasadzie dowolny obiekt podobny do pliku. W tej chwili myślę, że będę musiał albo zapisać plik na dysku, albo odczytać go w pamięci. Żadne z nich nie jest doskonałe.Dodawanie obiektu podobnego do pliku do pliku Zip w języku Python

Odpowiedz

6

Masz rację, to są tylko dwie opcje. Jeśli twój obiekt DefaultStorage jest duży, możesz chcieć najpierw zapisać go na dysku; w przeciwnym razie, chciałbym używać:

zipped = ZipFile(...) 
zipped.writestr('archive_name', default_storage_object.read()) 

Jeśli default_storage_object jest StringIO przedmiot, może korzystać default_storage_object.getvalue().