2017-12-07 1 views
0

Ich habe ein Skript geschrieben. Es findet den aktuellen Pfad und ändert den Pfad und die Reißverschlüsse. Dann möchte ich, dass es die Zip-Datei einfach in ein anderes Verzeichnis kopiert und am Ende den Inhalt des Ordners entfernt. Aber es reißt einmal und reißt wieder die ganzen Ordner und Zip-Dateien. Die intial Situation ist wie in Abbildung 1. Initial directroy-treePython - Ich zip einige Ordner mit Unterordnern, aber es reißt zweimal.

Das Skript ist wie folgt:

import os 
import zipfile 
import shutil 
import glob 

Pfad = os.getcwd() 
newPfad = 'D'+ Pfad[1:] 
Zip_name=os.path.basename(os.path.normpath(Pfad)) 
shutil.make_archive(Zip_name, 'zip', Pfad) 

if not os.path.exists(newPfad): 
    os.makedirs(newPfad) 

dest_dir=newPfad 
files = glob.iglob(os.path.join(Pfad, "*.zip")) 
for file in files: 
    if os.path.isfile(file): 
     shutil.copy2(file, dest_dir) 

shutil.rmtree(Pfad) 

Und schließlich wird das Ergebnis in der folgenden Abbildung dargestellt.

After Execution

Die Batch-Datei ist nur das Python-Skript für die Ausführung.

Wie kann ich die folgende gewünschte Situation bekommen?

enter image description here

+0

Sie packen das gesamte aktuelle Verzeichnis in die Zip-Datei (gespeichert auch im aktuellen Verzeichnis). Wenn Sie das nächste Mal Ihr Skript ausführen, ist das Archiv da und es wird auch gepackt. Sie sollten 'shilil.move' anstelle von' shuthil.copy2' eingeben. Als Anmerkung entfernt die letzte Zeile das aktuelle Verzeichnis, was zu unerwarteten Ergebnissen führen kann. – CristiFati

Antwort

0

Das Problem ist, dass Zip-Datei erstellt wird, bevor die Verzeichnisinhalte zur Liste daher leer Zip-Datei hinzugefügt wird. Erstellen Sie das Archiv im übergeordneten Verzeichnis und verschieben Sie es anschließend. Verschieben einer Datei oder eines Verzeichnisses ist billig und atomar.

import os 
import shutil 

cwd = os.path.abspath(os.path.curdir) 
zip_target = os.path.join(cwd, os.path.basename(cwd)) + '.zip' 
zip_source = shutil.make_archive(cwd, 'zip') 
os.rename(zip_source, zip_target) 
Verwandte Themen