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?
Iterator für Verzeichnisinhalt
einfach anstatt schreiben.
Code: Alles auswählen
for file_ in os.listdir(): print file_
Code: Alles auswählen
for file_ in iter(os.listdir()): print file_
-
- User
- Beiträge: 28
- Registriert: Dienstag 18. September 2007, 14:59
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
man nutze glob.iglob, siehe http://www.python.org/doc/2.5.2/lib/module-glob.html
-
- User
- Beiträge: 28
- Registriert: Dienstag 18. September 2007, 14:59
oh, danke!derdon hat geschrieben:einfach anstattCode: Alles auswählen
for file_ in os.listdir(): print file_
schreiben.Code: Alles auswählen
for file_ in iter(os.listdir()): print file_
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...
derdon hat dir doch eine Antwort gegeben.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).
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?
Gruß!
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?C4S3 hat geschrieben:derdon hat dir doch eine Antwort gegeben.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).
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.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.
Der Speicherverbrauch? Die "Anlaufzeit", bis die Liste erzeugt ist?Ich weiß also nicht, was an so'ner Liste so schlimm sein soll?
@DasIch
os.walk nutzt intern ebenfalls os.listdir, das hilft als gar nichts.