Ich möchte ein Element aus einer Liste mit Python ausgeben, es geht aber nicht. Beipiel: import os workdir = "C:\\testdata\\" filelist = os.walk (workdir) print filelist[0] <--- das geht nicht!!! das geht: for name in os.walk (workdir): print name
Ganz einfach: filelist ist keine Liste, auch wenn Du dies durch die Namensgebung implizierst. Stattdessen handelt es sich um einen Generator. Wenn Du die Fehlermeldung von Python beachtet hättest, hätte Dir das auch auffallen müssen: TypeError: 'generator' object has no attribute '__getitem__' Bei Generatoren kann man immer nur mit Hilfe der next-Methode auf das nächste Element zugreifen und hat keinen wahlfreien Zugriff wie bei einer Liste.
Wenn ich mir das so anschaue lifert die Funktion mehre Listen: http://www.saltycrane.com/blog/2007/03/python-oswalk-example/
Moin, os.walk liefert keine Liste zurück sondern einen Gernerator gefüllt mit 3er-Tuples. Der hat nun mal keinen Direktzugriffoperator (siehe Fehlermeldung _getimtem_ fehlt) Über das Objekt kann man nur iterieren (z.Bsp mit for)
Nachtrag: schau mal mit help(filelist) Das zeigt dir die Möglichkeiten der Klasse
Danke für Eure Antworten. Ich bin halt noch purer Anfänger. Beim nächsten Mal versuche ich die Fehlermeldung genauer auszuwerten.
Du kannst dir aus dem Generator eine Liste bauen lassen mit
1 | realfilelist = list(filelist) |
Auf diese Liste kannst du nun auch per Index zugreifen. Diese Methode hat aber den Nachteil, dass diese Liste (bei entsprechend vielen Dateien auf der Festplatte) sehr groß werden kann und somit viel Speicher belegt. Das ist der Grund, warum die Generatoren in Python eingeführt wurden. Der Generator braucht fast keinen Speicherplatz, da er die einzelnen Elemente (in diesem Fall die Namen und Inhalte der jedes Verzeichnisses) erst generiert werden, wenn sie auch tatsächlich benötigt werden. Damit darf die Sequenz der generierten Elemente sogar endlos sein. Diese Vorteile bringen aber die Einschränkung mit sich, dass die Elemente nur sequentiell gelesen werden können.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.