Dies ist mein erstes Mal zusammen Hack Bits Code Stücke zu einem Dienstprogramm, das ich brauche (ich bin ein Designer von Beruf) und, obwohl ich fühle ich bin In der Nähe habe ich Probleme, Folgendes zur Arbeit zu bringen.Python - Suche nach Dateien & ZIP, über mehrere Verzeichnisse hinweg
Ich brauche routinemäßig Dateien mit einer .COD-Erweiterung, die innerhalb einer von mir erstellten Verzeichnisstruktur liegen. Als Beispiel kann die Struktur wie folgt aussehen:
(Einzelstammordner) -> (mehrere Ordner) -> (zwei Ordner) -> (ein Ordner) -> COD-Dateien
ich ZIP brauchen Lade alle COD-Dateien in COD.zip hoch und lege diese Zip-Datei in ein Verzeichnis oberhalb der aktuellen Dateien. Ordnerstruktur würde wie folgt aussehen, wenn zum Beispiel getan:
EXPORT Ordner -> 9800 Ordner -> 6 Ordner -> OTA-Ordner (+ neu COD.zip) -> COD-Dateien
Meine Fragen -
Zuerst scheint die COD.zip, die es erstellt, für die COD-Dateien in ihm geeignet zu sein, aber wenn ich es entzippe, gibt es nur 1 .cod innerhalb, aber die Dateigröße dieses ZIP ist die Größe aller zusammen gepackten CODs.
Zweitens brauche ich die COD-Dateien gezippt werden ohne Ordner-Struktur - nur direkt in COD.zip. Momentan erstellt mein Skript eine komplette Verzeichnisstruktur (beginnend mit "users/mysuername/etc etc").
Jede Hilfe wäre sehr dankbar - und Erklärungen noch besser als ich versuche :)
Dank zu lernen.
import os, glob, fnmatch, zipfile
def scandirs(path):
for currentFile in glob.glob(os.path.join(path, '*')):
if os.path.isdir(currentFile):
scandirs(currentFile)
if fnmatch.fnmatch(currentFile, '*.cod'):
cod = zipfile.ZipFile("COD.zip","a")
cod.write(currentFile)
scandirs(os.getcwd())
Ich mache mir Sorgen, dass zu viele Zip-Datei-Handles gleichzeitig geöffnet bleiben.Sie können Ihre Rekursion ein wenig ändern, um zuerst alle Verzeichnisse durchzuspielen und erst dann, wenn keine weiteren Verzeichnisse vorhanden sind, und dann alle Dateien im aktuellen Verzeichnis ausführen, anstatt Dateien und Verzeichnisse gleichzeitig zu mischen. –
Das funktioniert perfekt (abzüglich der leeren Reißverschlüsse)! Ich werde versuchen, sie irgendwie automatisch zu löschen. Vielen Dank! – Rob
3. Mal ist ein Charme! :-D –