2016-07-13 6 views
1

Ich habe ein Programm, das eine .zip-Datei, die aus einer Anzahl von .html-Dateien besteht, an den Benutzer ausgibt. Ich brauche die .html-Dateien nicht irgendwo außerhalb der .zip-Datei, also dachte ich, sie sollten TemporaryFiles mit dem tempfile-Modul machen. Wie schreibe ich eine .zip von TempFile (vorausgesetzt, das ist möglich)?Kann ich eine .zip bestehend aus TemporaryFiles schreiben?

Wenn ich kann, kann ich auch die Namen der temporären Dateien angeben, so dass, wenn der Benutzer die .zip dekomprimiert, die Dateien lesbare Namen haben?

Antwort

1

Die beste Möglichkeit zum Erstellen einer Zip-Datei besteht darin, alle erforderlichen Dateien (Ihre HTML-Dateien) in einem (temporären) Verzeichnis zu speichern. Dann können Sie das Verzeichnis komprimieren.

Sagen Sie, speichern Sie Ihre ZIP-Datei in work_dir und Sie eine Funktion write_html verwendet, um Ihre HTML-Datei zu schreiben, können Sie Ihre HTML-Dateien wie diese komprimieren:

import os 
import shutil 
import tempfile 
import zipfile 

work_dir = "..." 
zip_path = os.path.join(work_dir, "delivery.zip") 

zip_dir = tempfile.mkdtemp() 
try: 
    with zipfile.zipfile(zip_path, "w", compression=zipfile.ZIP_DEFLATED) as zfd: 
     for html_name in html_names: 
      html_path = os.path.join(zip_dir, html_name) 
      write_html(html_path, html_name) 
      zfd.write(html_path, html_name) 
finally: 
    shutil.rmtree(zip_dir) 
+0

Genau das, was ich brauchte; Vielen Dank! –

Verwandte Themen