Elemente aus Liste löschen
Verfasst: Donnerstag 17. August 2006, 15:39
Hallo,
ich komme ursprünglich aus der PHP-welt und will mich nach 4 Jahren mal ein wenig in anderen Sprachen austoben. Dazu habe ich in Python mal ein kleines Backup-Script geschrieben. Da habe ich eine kleine Verständnisfrage:
Ich habe, um aus der Liste der Dateien/Verzeichnisse alle Dateien zu löschen, folgenden Code erstellt (und schäme mich richtig dafür):
Wie gesagt, ich bin von allen anderen Sprachen dieser Welt die "andere" FOR-Schleife gewöhnt und habe keinen einfacheren Weg gefunden, aus der Liste die Dateien zu entfernen. Ich habe beim Durchiterieren immer einen "Index out of bounds" (sinngemäß) erhalten. Das ist ja auch verständlich, wenn ich die Liste (oder war's ein Tupel?) beim Durchlaufen verkürze.
Aber das muss doch auch wesentlich eleganter gehen mit dem Löschen von Elementen. (Die Funktion isdir() habe ich erst nach der Variante mit dem / am Ende entdeckt (ich hab (PHP) nach is_dir() gesucht ^^).
Helft mir mal auf die Sprünge, so will ich den Code nicht lassen, das ist ja beschämend.
Sanji
ich komme ursprünglich aus der PHP-welt und will mich nach 4 Jahren mal ein wenig in anderen Sprachen austoben. Dazu habe ich in Python mal ein kleines Backup-Script geschrieben. Da habe ich eine kleine Verständnisfrage:
Ich habe, um aus der Liste der Dateien/Verzeichnisse alle Dateien zu löschen, folgenden Code erstellt (und schäme mich richtig dafür):
Code: Alles auswählen
import dircache
import operator
import os
import time
backupTarget = "backup" # das Zielverzeichnis für die Backups
directories = dircache.listdir(".") # das zu durchsuchende Verzeichnis (. = Verzeichnis, in dem die backup.py liegt)
winrar = "D:\\WinRAR\\rar" # Pfad zur Kommandozeilen-Version von WinRAR
options = "a -r -m5 -inul" # Optionen für WinRAR (a = hinzufügen, r = rekusriv, m5 = höchste Kompression, inul = keine Ausgabe)
# Verzeichnisse kennzeichnen
dircache.annotate('.',directories)
# Unnoetiges Verzeichnis entfernen
directories.remove(backupTarget+"/");
#
# Alle anderen Dateien entfernen
# (Sicher schrecklich gelöst, aber ich bin Phyton-Anfänger...)
#
deleted = 1
while deleted:
for i in range(len(directories)):
string = directories[i]
if string[-1] != "/":
del directories[i]
deleted = 1
break
else:
deleted = 0
Aber das muss doch auch wesentlich eleganter gehen mit dem Löschen von Elementen. (Die Funktion isdir() habe ich erst nach der Variante mit dem / am Ende entdeckt (ich hab (PHP) nach is_dir() gesucht ^^).
Helft mir mal auf die Sprünge, so will ich den Code nicht lassen, das ist ja beschämend.
Sanji