Python & Wildcards

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.
BlackJack

@jonas: Warum diese Asymmetrie? `find()` statt `startswith()`?

@Frau_U: Ich glaube immer noch die Ordnernamen kommen von woanders aber nicht von dem Quelltext mit dem `glob()`. Das kann einfach nicht sein.
Benutzeravatar
jonas
User
Beiträge: 156
Registriert: Dienstag 9. September 2008, 21:03

@Blackjack:
Habs wohl einfach übersehen :wink:

Code: Alles auswählen

def starts_ends_with(string, starts, ends):
    if string.startswith(starts) and string.endswith(ends):
        return True
Ich verstehte allerdings noch nicht so 100%, was der Threadersteller haben möchte?

Lg, Jonas
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

jonas hat geschrieben:@Blackjack:
Habs wohl einfach übersehen :wink:

Code: Alles auswählen

def starts_ends_with(string, starts, ends):
    if string.startswith(starts) and string.endswith(ends):
        return True
Bitte so:

Code: Alles auswählen

def starts_ends_with(string, starts, ends):
    return (string.startswith(starts) and string.endswith(ends))
(Wobei eine Funktion mit einer Zeile IMO *völlig* unnötig ist...)
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

http://ms4py.org/
BlackJack

@ms4py: "Völlig" ist vielleicht übertrieben. Man kann sich mit `partial()` eine Funktion daraus basteln, die man zum `filter()`\n verwenden kann. :-)
Benutzeravatar
Frau_U
User
Beiträge: 16
Registriert: Dienstag 13. April 2010, 18:15

Hey Ihr alle!

ich habe es doch noch hinbekommen :-)
Danke für eure hilfreichen Antworten.

Problem ist nur. Ich arbeite mit der Eclipse und nem Python Plugin. Da funktioniert es so wie ich es will.
Aber in der IDLE oder der CMD Dunktioniert mein os.path.walk nicht mehr :-(

Hier mal die Fehlermeldung in der CMD.
Weiß leider nicht wieso er das nicht kennt :-(

PngOpt Objekt wird angelegt und manuelles cv Verzeichnis mitgegeben
Objekt pngConvertObjekt wird angelegt
Objekt statistikObjekt wird angelegt
__init__ statistik
erfolgreich Parameter geprueft
Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\Frau_U\Desktop\Java_work_new\PngOptimizer\src\OhneKommenatre_PNG_Optimizer.py", line 164, in <module>
pngOpti = PngOpt("C:\\Dokumente und Einstellungen\\Frau_U\\Desktop\\Java_work_new\\PngOptimizer\\src\\bilder\\")
File "C:\Dokumente und Einstellungen\Frau_U\Desktop\Java_work_new\PngOptimizer\src\OhneKommenatre_PNG_Optimizer.py", line 27, in __init__
self.pruefeParameter()
File "C:\Dokumente und Einstellungen\Frau_U\Desktop\Java_work_new\PngOptimizer\src\OhneKommenatre_PNG_Optimizer.py", line 35, in pruefeParameter
self.pngConvertObjekt.pngOut()
File "C:\Dokumente und Einstellungen\Frau_U\Desktop\Java_work_new\PngOptimizer\src\OhneKommenatre_PNG_Optimizer.py", line 87, in pngOut
os.path.walk(self.verzeichnis, leseVerzeichnisAus , "Test")
AttributeError: 'module' object has no attribute 'walk'
BlackJack

Was wird denn für `os.path.__file__` ausgegeben? Und welche Python-Version wird benutzt?

Ausserdem sieht mir das extrem nach "Java" aus mit den Klassen. Wahrscheinlich sind die fast alle überflüssig und Funktionen würden ausreichen.
Benutzeravatar
Frau_U
User
Beiträge: 16
Registriert: Dienstag 13. April 2010, 18:15

so wurde jetzt anders gelöst. kA warum das walk nich funktioniert hat...

Code: Alles auswählen

    def inhaltVerzeichnis(self, pfad):
        for f in os.listdir(pfad):
            name = os.path.join(pfad, f)
#            print(name)
            if os.path.isdir(name):
                self.inhaltVerzeichnis(name)
            elif os.path.isfile(name) and  f.endswith(".png"):
                print("PNG-Datei gefunden: " + name)
                self.schreibePngOutBefehl(name) 
            
#    Diese Methode ist fuer den PngOut Befehl in der CMD zustaendig
#    Mit dem Befehl der zB so heissen kann "pngout Bild1.png Bild2.png" wird Bild1.png konvertiert und als Bild2.png gespeichert
    def schreibePngOutBefehl(self, dateiname):
        try:
            self.dateiname = dateiname
            print("\n=============================\nFunktion pngout Befehl geschrieben")
            pngbefehl = str("pngout " + "\"" + self.dateiname + "\" ")
            os.execl("pngout.exe", pngbefehl)
        except:
            self.schreibeFehlerInStatistik(Exception)
            print("fehler bei pngout")
Er soll für jede Datei die er in den Unterordnern findet einen eigenen pngout befehl in die console schreiben.
funktioniert an sich auch. nur bricht er nachdem er das erste bild konvertiert hat ab und beendet das ganze.sollte aber dann den nächsten pngoutbefehl schreiben für die nächste datei die er findet.
kann mir jemand helfen?
BlackJack

@Frau_U: Die `os.exec*()`-Funktionen ersetzen den aktuellen Prozess mit dem neu gestarteten. An der Stelle wird das Programm das `exec*()` aufruft also beendet.

Und externe Prozesse zu starten gibt es das `subprocess`-Modul.

Und ich möchte noch einmal anmerken, dass mir die Klasse überflüssig erscheint.

Warum wird in `schreibePngOutBefehl()` der Dateiname an das Objekt gebunden!?

Ausserdem machen beide Methoden nicht das was der Name suggeriert.
Benutzeravatar
Frau_U
User
Beiträge: 16
Registriert: Dienstag 13. April 2010, 18:15

Super es funktioniert :-) Vielen dank!!!! Muss jetzt nur noch die Methoden schreiben, die die Statistik erstellen!
DANKE!!
Benutzeravatar
Frau_U
User
Beiträge: 16
Registriert: Dienstag 13. April 2010, 18:15

So nochmal vielen vielen Dank an alle! Mein Programm ist fertig :-) Verzeichnis wird durchlaufen, Statistik steht! Alles Super!

Vielen Dank euch allen!!!!! :) :) :)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich würds ja gerne mal sehen... ;-)

(-> paste.pocoo.org)
Antworten