Seite 1 von 1
Iterator für Verzeichnisinhalt
Verfasst: Dienstag 25. November 2008, 21:39
von feuervogel
Hallo,
zunächst: Ich weiß, dass es os.listdir() gibt. Leider gibt diese Funktion eine Liste mit Namen zurück. Wenn sich aber _sehr viele_ Dateien in dem Verzeichnis befinden, ist das nicht grade ressourcenschonend. Ich hätte gerne eine Funktion, die mir einen Iterator zurückliefert (so dass ich über den Verzeichnisinhalt je Eintrag iterieren kann so wie ich über die Zeilen einer Datei einzeln iterieren kann).
Gibts sowas und bin ich nur zu blind zum suchen? Wer kann man mir nen Tipp geben, wie man sowas implementiert?
Verfasst: Dienstag 25. November 2008, 21:47
von derdon
einfach anstatt
schreiben.
Verfasst: Dienstag 25. November 2008, 21:47
von feuervogel
na gut, ich geb mir die antwort selbst:
man nutze glob.iglob, siehe
http://www.python.org/doc/2.5.2/lib/module-glob.html
Verfasst: Dienstag 25. November 2008, 21:47
von feuervogel
derdon hat geschrieben:einfach anstatt
schreiben.
oh, danke!
edit: ähm, verstehe mich nicht falsch, aaaber:
wenn os.listdir() aufgerufen wird, wird doch die liste erzeugt (und steht somit im RAM). dass dann daraus ein iterator gemacht wird, nutzt mir danach ja auch nicht mehr viel...
Verfasst: Dienstag 25. November 2008, 22:06
von C4S3
Ich hätte gerne eine Funktion, die mir einen Iterator zurückliefert (so dass ich über den Verzeichnisinhalt je Eintrag iterieren kann so wie ich über die Zeilen einer Datei einzeln iterieren kann).
derdon hat dir doch eine Antwort gegeben.
Bevor ich den Inhalt einer Datei oder eines Verzeichnisses ausgeben kann, muss ich diesen halt erst mal erfassen. Da führt für mich (fast) kein Weg dran vorbei.
Ich weiß also nicht, was an so'ner Liste so schlimm sein soll?
Verfasst: Dienstag 25. November 2008, 22:22
von DasIch
Nimm os.walk
Verfasst: Dienstag 25. November 2008, 23:09
von lunar
C4S3 hat geschrieben:Ich hätte gerne eine Funktion, die mir einen Iterator zurückliefert (so dass ich über den Verzeichnisinhalt je Eintrag iterieren kann so wie ich über die Zeilen einer Datei einzeln iterieren kann).
derdon hat dir doch eine Antwort gegeben.
Die war aber falsch. "for i in list_type" ist das gleiche wie "for i in iter(list_type):", die Liste bleibt so oder so im Speicher. Woher sollte der Iterator auch sonst seine Elemente nehmen?
Bevor ich den Inhalt einer Datei oder eines Verzeichnisses ausgeben kann, muss ich diesen halt erst mal erfassen. Da führt für mich (fast) kein Weg dran vorbei.
Daran führt ein Weg vorbei. Auf C-Ebene ist das Abfragen der Verzeichniseinträge ein iterativer Vorgang. "readdir()" gibt jeweils immer nur ein Element zurück.
Ich weiß also nicht, was an so'ner Liste so schlimm sein soll?
Der Speicherverbrauch? Die "Anlaufzeit", bis die Liste erzeugt ist?
@DasIch
os.walk nutzt intern ebenfalls os.listdir, das hilft als gar nichts.