Forum: PC-Programmierung Liste mit Python ausgeben


von The AppleTree (Gast)


Lesenswert?

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

von The AppleTree (Gast)


Lesenswert?

Meine Frage - warum geht das hier nicht:

print filelist[0}?

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

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.

von Karl (Gast)


Lesenswert?

Wenn ich mir das so anschaue lifert die Funktion mehre Listen:

http://www.saltycrane.com/blog/2007/03/python-oswalk-example/

von nicht"Gast" (Gast)


Lesenswert?

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)

von nicht"Gast" (Gast)


Lesenswert?

Nachtrag:


schau mal mit help(filelist) Das zeigt dir die Möglichkeiten der Klasse

von The AppleTree (Gast)


Lesenswert?

Danke für Eure Antworten. Ich bin halt noch purer Anfänger. Beim 
nächsten Mal versuche ich die Fehlermeldung genauer auszuwerten.

von Yalu X. (yalu) (Moderator)


Lesenswert?

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
Noch kein Account? Hier anmelden.