newcomers second script - ASCII groping -

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
Benutzeravatar
5inch
User
Beiträge: 14
Registriert: Dienstag 5. April 2011, 08:07
Wohnort: München

Hallo Forum,

ich habs nach langer Zeit mal wieder geschaft mir ein script zu basteln.
Ich fänds klasse, wenn Ihr mir ein paar Tipps gebt, was ich besser machen kann.
Ich fang ja gerade erst mit Python an.
Also hier kommt der code:

Code: Alles auswählen

fileSourcePts = "bl05.pts"
textSourceTif = "05.tif"
textSourceJpg = "05.jpg"
fileOutput = "NewBl"

def allFiles():
    global ZeiJpg
    global ZeiTif
    global ZeiPts
    for count in range(1,13):
        num = str(count)
        ZeiJpg = ((num.zfill(2) + ".jpg"))
        ZeiTif = ((num.zfill(2) + ".tif"))
        ZeiPts = ((num.zfill(2) + ".pts"))
        replaceText()
    

def replaceText():
    tmpFile = open(fileSourcePts, "r") 
    firstRun = tmpFile.read() 
    tmpFile.close() 
    tmpFile = open((fileOutput + ZeiPts), "w") 
    secondRun = firstRun.replace(textSourceJpg, ZeiJpg)
    tmpFile.write(secondRun.replace(textSourceTif, ZeiTif))
    tmpFile.close()
    filePrint = str(fileOutput + ZeiPts)
    print (filePrint + ":created and saved...")


#Hauptprogramm

allFiles()
Zuletzt geändert von Anonymous am Mittwoch 9. November 2011, 17:56, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
...It isn’t about how hard you hit, it's about how hard you can get hit and keep moving forward. How much can you take and keep moving forward? That's how winning is done. ----Rocky Balboa
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

5inch hat geschrieben:Ich fänds klasse, wenn Ihr mir ein paar Tipps gebt, was ich besser machen kann.
Eine ganz kleine Liste, da ich aktuell keine Zeit für Details habe:
- Namens- und Formatierungskonventionen von PEP-8 einhalten
- auf global() verzichten
- Beim Öffnen von Dateien mit with arbeiten
- überflüssige Klammern entfernen
Benutzeravatar
5inch
User
Beiträge: 14
Registriert: Dienstag 5. April 2011, 08:07
Wohnort: München

so,
was macht das script,
es durchsucht eine ASCII.pts Datei nach:

"05.tif"
"05.jpg"

und schreibt 12 Version

von:
01.tif...12.tif
01.jpg...12.jpg

als 01.pts...12.pts

in 12 Dateien raus....
...It isn’t about how hard you hit, it's about how hard you can get hit and keep moving forward. How much can you take and keep moving forward? That's how winning is done. ----Rocky Balboa
Benutzeravatar
5inch
User
Beiträge: 14
Registriert: Dienstag 5. April 2011, 08:07
Wohnort: München

@:/me

wao, das ging schnell....

merci, gute tipps...
...It isn’t about how hard you hit, it's about how hard you can get hit and keep moving forward. How much can you take and keep moving forward? That's how winning is done. ----Rocky Balboa
Benutzeravatar
5inch
User
Beiträge: 14
Registriert: Dienstag 5. April 2011, 08:07
Wohnort: München

@:/me

wie krieg ich die "globals" weg,
da muss ich echt passen....

und warum solln die denn weg?

merci, 5inch
...It isn’t about how hard you hit, it's about how hard you can get hit and keep moving forward. How much can you take and keep moving forward? That's how winning is done. ----Rocky Balboa
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Du solltest keine globalen Variablen verwenden, da du damit Abhängigkeiten zwischen vielen Komponenten schaffst. Abhängikeiten sind generell eine schlechte Idee, da immer mehr und mehr beachtet werden muss. Drehst du irgendwo an einer kleinen Schraube, dann ergeben sich oft Probleme in ganz anderen Bereichen. Übergebe daher Daten als Parameter in eine Funktion hinein und lass dir die Ergebnisse mit `return` zurückgeben.

Sebastian
Das Leben ist wie ein Tennisball.
BlackJack

@5inch: Neben der Schreibweise sind auch die Namen selbst nicht immer gut gewählt. Funktionen sollte, wie Methoden, Tätigkeiten beschreiben. Und Abkürzungen sollte man vermeiden wenn sie nicht allgemein bekannt sind. Ich rätsele zum Beispiel was der Präfix `Zei` wohl bedeuten mag.

Statt `str()` und `str.zfill()` würde man in Python eher Zeichenkettenformatierung mit dem ``%``-Operator oder der `format()`-Methode auf Zeichenketten verwenden.

Durchnummerierte Namen sind ein „code smell“, auch wenn es keine Ziffern sondern Zahlen als Worte sind. Das betrifft `firstRun` und `secondRun`. Die beschreiben nicht wirklich die Bedeutung der Objekte die daran gebunden sind. Den zweiten Namen kann man sich auch Sparen wenn man das Zwischenergebnis nicht an einen Namen bindet.

Der `str()`-Aufruf in der vorletzten Zeile von `replaceText()` ist überflüssig. Der Name `filePrint` erschliesst sich mir nicht. Und man hätte ihn auch wieder einsparen können, wenn man die Zeichenkette per Zeichenkettenformatierung erstellen würde, statt mit ``+``.

`str()` und ``+`` ist so BASIC, aber nicht wirklich schönes Python. ;-)

Zum Programmablauf selbst, scheinst Du die selbe Datei 12 mal zu öffnen und einzulesen, was mir 11 mal zu viel erscheint.
Benutzeravatar
5inch
User
Beiträge: 14
Registriert: Dienstag 5. April 2011, 08:07
Wohnort: München

@BlackJack:

danke für Deine Tipps.
Ja wie schon erwähnt, ich arbeite dran besser zu werden... deshalb bin ja in dem Forum und nehme gerne Eure Hilfe in Anspruch.

zu Deinen Tipps, alles soweit verstanden, danke, tu mich noch schwer mit den Anwendungen,
aber da muss ich durch.

danke erst mal, :D

cheers 5inch
...It isn’t about how hard you hit, it's about how hard you can get hit and keep moving forward. How much can you take and keep moving forward? That's how winning is done. ----Rocky Balboa
Antworten