Seite 1 von 1

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

Verfasst: Montag 18. August 2014, 21:46
von Sinnentlehrt
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.

Re: Variable mir fortlauf. Nummer erzeugen, zB. Liste1, List

Verfasst: Montag 18. August 2014, 21:54
von Hyperion
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.

Re: Variable mir fortlauf. Nummer erzeugen, zB. Liste1, List

Verfasst: Montag 18. August 2014, 22:17
von Sinnentlehrt
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.

Re: Variable mir fortlauf. Nummer erzeugen, zB. Liste1, List

Verfasst: Montag 18. August 2014, 22:44
von Hyperion
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']

Re: Variable mir fortlauf. Nummer erzeugen, zB. Liste1, List

Verfasst: Montag 18. August 2014, 22:58
von Sinnentlehrt
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!!!