Wow - danke fuer die vielen Vorschlaege!
BlackJack hat geschrieben:So wie es im ersten Beitrag aussieht fängt das Programm bei jedem Lauf wieder mit 1 an? Dann ist das speichern überflüssig und man könnte `itertools.count()` benutzen um die Zahlen zu erzeugen:
Ja, das Programm zaehlt jedesmal neu hoch, wenn ich es neu starte. Mein Problem war, dass ich den Zaehler danach nur ueber die txt-Datei in meine Defintion hineinbekommen konnte, ohne dass er jedesmal zurueckgesetzt wurde.
Nebenbei:
BlackJack hat geschrieben:Ausserdem berücksichtigt Dein Quelltext den Namen gar nicht, wenn man also 'spam01.bmp' bis 'spam05.bmp' und 'zikzak01.bmp' bis 'zikzak20.bmp' hat und ein neues 'spam*'-Bild speichern möchte, dann bekommt man 'spam21.bmp' als Ergebnis.
Das ist in meiner Version auch der Fall und stoert mich nicht sonderlich. Im Prinzip bekomme ich die Reihenfolge, in der die verschiedenen Bilder gespeichert wurden, auch ueber die Zeit, zu der sie gespeichert wurden, aber es macht nichts, wenn ihre Nummern das auch nochmal widerspiegeln.
BlackJack hat geschrieben:
Und man sollte die Zahlen in den Dateinamen rechts mit ein paar 0en auffüllen, dann werden die Namen alphabetisch "richtig" sortiert, wenn es mehr als 10 werden.
Ja, das sollte ich wirklich einbauen. Derzeit lasse ich die Dateien einfach nach Speicherzeitpunkt sortieren, dann sind sie auch in der richtigen Reihenfolge
.
Ich probiere den counter aus, sobald ich wieder an einem Rechner bin, auf dem ich die PIL installiert habe (das ist hier leider nicht der Fall
...)
BlackJack hat geschrieben:
Ist `Mustername` eine Sequenz von Zeichenketten oder nur eine einzelne? Im ersten Fall wäre der Name nicht so passend, im zweiten ist `os.path.join(Mustername)` überflüssig.
Das verstehe ich jetzt nicht, vor allem das "nicht so passend". Ich speichere derzeit kleine Pixelmuster ab, um mir anzusehen, nach welcher Systematik ich am besten zwischen zwei Grund-Situationen unterscheide, deshalb habe ich die zugehoerigen Begriffe durch ein "Muster-" oder "Muesterchen-" gekennzeichnet. Das sind dann jeweils einzelne Zeichenketten.
(Wenn Intersse daran besteht, was ich da genauer treibe, kann ich das nocht etwas ausfuehrlicher erlaeutern.)
BlackJack hat geschrieben:
Edit: `os.path` braucht man nicht importieren, das ist in `os` schon inklusive.
Oh... danke.
nkoehring hat geschrieben:Das wuerde ich so anstellen (ich programmiere es Prozedural, okay
):
Code: Alles auswählen
bitmaps = [os.path.splitext(bmp)[0] for bmp in os.listdir(".") if bmp.endswith(".bmp")]
#vorausgesetzt die Dateien enden mit einer zweistelligen Nummer:
bildnr = "%2d" %(int(bitmaps[-1][-2:])+1)
#bildbearbeitungskrams...
bildname = os.path.join(mustername)+bildnr+endung
Bild.save(bildname, "BMP")
Das ist auch eine pfiffige Idee - und ich verstehe sogar, wie es funktioniert
! Man muesste allerdings vermutlich, wenn in dem Verzeichnis verschiedene Namen vor der Zahl kommen, den Namensteil vor dem Sortieren abschneiden, andernfalls gibt es vielleicht doch ein Problem, wenn einfach immer wieder das Bild "Zufall01" als Basis fuer das Weiterzaehlen genommen wird... Eventuell werde ich fuer das Hochzaehlen auf BlackJacks Vorschlag mit dem counter zurueckgreifen, aber
dies loest vermutlich meine Frage, wie ich verhindern kann, dass bei mehreren Durchlaeufen fuer dasselbe Bild immer wieder dieselben Sicherungskopien unter demselben Namen angelegt werden, was ja irgendwie etwas ueberfluessig ist (und bei grossen Bildern einfach auch Zeit kostet)... Im Moment sage ich jeweils, ob ich eine Kopie haben will, aber ich werde wohl irgendwann dazu uebergehen, einen Programmdurchlauf am Abend zu starten und am Morgen nach Ergebnissen zu sehen; zu dem Zeitpunkt sollte moeglichst alles "von selbst" entschieden werden koennen. Insofern auch dafuer ein glueckliches "Danke!"
nkoehring hat geschrieben:
Das koennte man umgehen, indem man sich die letzte Zahl merkt und das Programm hochzaehlen laesst. Also setzt man irgendwie einen Schalter der mir sagt: Ja ich hab schonmal nachgeschaut, was die letzte Datei ist, also zaehle ich die Variable Zaehler jetzt direkt hoch und schaue nicht nochmal, bevor ich die naechste Datei speichere.
Das Problem daran ist, dass ich dafuer irgendwo die Information brauche, auf welchem Wert mein "Zaehler" denn gerade steht?
Hm, also, angesehen habe ich es. Aber dann kommt im Grunde dieselbe Fragenliste, die ich schon als "duemmster anzunehmender Programmierer" an EnTeQuAk geschrieben habe: Mir ist unklar, wie dann der Speicherbefehl auszusehen haette?