Variable mir fortlauf. Nummer erzeugen, zB. Liste1, Liste2..

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Sinnentlehrt
User
Beiträge: 67
Registriert: Mittwoch 30. Januar 2013, 22:32

Hallo Leute,

leider bin ich bei dieser Frage auf viele Lösungen gestoßen die alle nicht in Python waren. Na ja, und jetzt Frage ich mal hier.

Ich möchte bei einer if-Abfrage Dateinamen in einer Liste speichern, dabei soll der Name der Liste jedesmal sich um einen Zähler erhöhen wenn ein anderer Ordner abgefragt wird. Leider begreife ich nicht wie ich den Zähler an den Listennamen anhängen soll. Hier mal mein Versuch.

Code: Alles auswählen

			for file in os.listdir(folderpath):
				zaehler = zaehler + 1
				if file.endswith(".jpg") or file.endswith(".JPG"):
					print file
					num_jpg_container = jpg_container{0}.format(zaehler)
					num_jpg_container.append(file)
				if file.startswith("inc.header"):
					print file
				print ("Es sind", len(num_jpg_container),"Bilder im Ordner")
Es soll halt erstmal für jeden Ordner die Dateien Menge ermittelt werden. Schon mal Danke für die Hilfe im voraus.
Du weißt das du vergessen hast einzukaufen, wenn du dich morgens mit Geschirrspülmittel duscht.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Das klingt alles sehr gruselig! Kannst Du einmal versuchen zu beschreiben, was Dein eigentliches Ziel ist? Um es kurz zu machen: Variablen nummeriert man nicht! Du willst vermutlich irgend wie eine Menge an Daten in einer Datenstruktur sammeln. Wie die dann genau aussieht, bzw. welche Collection-Typen (List, Set, Dictionary, usw) man dazu nutzen sollte, hängt vom konkreten Problem ab.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Sinnentlehrt
User
Beiträge: 67
Registriert: Mittwoch 30. Januar 2013, 22:32

Hyperion, danke für das Mut machen :D .

Ich glaube in meinem Fall reicht eine einfache Liste. Das Skript soll erstmal zählen wie viele Bilder sich in einem Ordner aufhalten. Da ich die Bildernamen noch weiter verarbeiten möchte sollen diese halt in einer Liste gespeichert werden und ich möchte für jeden Ordner eine eigene Liste, darum der Versuch verschiedene Namen zu erzeugen.
Du weißt das du vergessen hast einzukaufen, wenn du dich morgens mit Geschirrspülmittel duscht.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Du kannst die Anzahl der Elemente einer Liste mittels der Funktion ``len`` bestimmen. Man muss da also nichts hochzählen oder so.

Nun, Du könntest die Verzeichnispfad als Schlüssel, und die darin enthaltenen Bilder in einer Liste als Wert speichern. Damit hast Du ein Schlüssel-Wert-Paar - und dafür gibt es ja Dictionaries in Python.

Mal als Beispiel:

Code: Alles auswählen

pictures = {
    "/foo/bar": ["bild1.png", "bild2.png", "bild3.png"],
    "/ein/anderer/pfad": ["noch_ein_bild.png", "und_noch_eines.png"]
}
Da Du mit einer "leeren" Struktur startest, sprich die Schlüssel und Werte erst nach und nach dazu kommen, bietet sich der Einsatz eines ``defaultdict`` an; dies ist eine spezielle Art von Dictionary, für das man eine Factory-Funktion angeben kann, die ein neues, leeres "Wert"-Objekt für einen neuen Schlüssel anlegt. In Deinem Falle wäre das die ``list``-Funktion:

Code: Alles auswählen

from collections import defaultdict
pictures = defaultdict(list)
pictures["/foo/bar"]
> [] # eine leere Liste wurde bereits angelegt, ohne dass man das händisch tun müsste!

# Wir fügen zwei Dateinamen in die Liste ein...
pictures["/foo/bar"].append("bild1.png")
pictures["/foo/bar"].append("bild2.png")

# und rufen sie wie gehabt ab
pictures["/foo/bar"]
> ['bild1.png', 'bild2.png']
Zuletzt geändert von Hyperion am Montag 18. August 2014, 22:51, insgesamt 1-mal geändert.
Grund: Beispiel mit defautldict erweitert
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Sinnentlehrt
User
Beiträge: 67
Registriert: Mittwoch 30. Januar 2013, 22:32

Ahh, damit hast du ja gleich mein zweites Problem gelöst. Danke!
(Und ja, das war Sarkasmus... bis auf das Danke)

Jetzt muß ich mir Morgen nur wieder anlesen wie ich ein Dictinary befülle. Oh man, wenn man keine Ahnung hat...
Und bei Listen war es so gedacht für jeden Ordner eine eigene Liste zu erzeugen. Das mit 'len' war sogar mir klar, aber ok, sowas braucht man mir leider nicht zu glauben.

Nochmal danke Hyperion.


EDIT:

Und danke, danke, danke!! :D Jetzt kann sogar ich es anwenden!!!
Du weißt das du vergessen hast einzukaufen, wenn du dich morgens mit Geschirrspülmittel duscht.
Antworten