Seite 1 von 1

Ist das Logisch richtig?

Verfasst: Sonntag 19. November 2006, 11:31
von EnTeQuAk
Hey h0! :)


Hal ne Frage.

Ginge es, wenn ich schreibe:

Code: Alles auswählen

# als Beispiel -- spaeter dynamisch
file = 'hallo.py'
if file.endswith.upper() == ('.PY' or '.PHP' or '.TXT'):
    print 'Die Datei kann verarbeitet werden!'
else:
    print 'Sorry ich nehme nur PHP, Python und oder Text-Dateien an!'
Mir geht es hier um die '' if '' konstruktion.
Ist so etwas logisch richtig und würde auch so funktionieren, wie es sein sollte ;)

Ansonsten müsste ich ja eigentlich so etwas schreiben:

Code: Alles auswählen

if file.endswith.upper() == '.PY' or file.endswith.upper() == '.PHP' or file.endswith.upper() == '.TXT':
    print 'Usw... ;)'
Ist mir aba zu lang daher die Frage über die obere Konstruktuion.

MfG EnTeQuAk

Verfasst: Sonntag 19. November 2006, 11:51
von Whitie
Hi,
dein Beispiel funktioniert nicht. Endswith übernimmt als Argument die Zeichenkette mit der das Ende des Strings verglichen werden soll.

Wenn dann:

Code: Alles auswählen

d = 'hallo.py'
if d.upper().endswith('.PY'):
    print ...
Aber wie wäre es mit:

Code: Alles auswählen

import os
d = 'hallo.py'
if os.path.splitext(d)[1].upper() in ('.PY', '.PHP', '.TXT'):
    print 'Die Datei kann verarbeitet werden!'
else:
    print 'Sorry ich nehme nur PHP, Python und oder Text-Dateien an!'
Gruß, Whitie

Re: Ist das Logisch richtig?

Verfasst: Sonntag 19. November 2006, 11:52
von gerold
EnTeQuAk hat geschrieben:

Code: Alles auswählen

file = 'hallo.py'
if file.endswith.upper() == ('.PY' or '.PHP' or '.TXT'):
    print 'Die Datei kann verarbeitet werden!'
else:
    print 'Sorry ich nehme nur PHP, Python und oder Text-Dateien an!'
Hi EnTeQuAk!

1.) Du überschreibst die eingebaute Funktion ``file``.
2.) ??? Hast du deine Konstrukte schon mal ausprobiert? :D

Bis Python 2.4:

Code: Alles auswählen

>>> s = "Hallo Welt"
>>> True in map(s.endswith, ("Welt", "Feuer", "Nase"))
True
>>> True in map(s.endswith, ("Erde", "Feuer", "Nase"))
False
>>> if True in map(s.endswith, ("Welt", "Feuer", "Nase")):
...     print "OK"
... else:
...     print "Nix OK"
...     
OK
>>> 
Ab Python 2.5:

Code: Alles auswählen

s.endswith(("Welt", "Feuer", "Nase"))
Und wenn du ``upper()`` oder ``lower()`` einsetzen möchtest, dann solltest du es **vor** ``startswith()`` machen.

Code: Alles auswählen

s.upper().endswith(".PY")
mfg
Gerold
:-)

Verfasst: Sonntag 19. November 2006, 11:59
von BlackJack
Der Ausdruck auf der rechten Seite wird ausgewertet, und zwar immer zum ersten "wahren" Objekt wenn mindestens ein Objekt "wahr" ist bzw. zum letzen "unwahren" Objekt, wenn alle "unwahr" sind:

Code: Alles auswählen

In [8]: 'spam' or False or 42
Out[8]: 'spam'

In [9]: '' or False or 0
Out[9]: 0
Was Du suchst um Schreibarbeit zu sparen ist:

Code: Alles auswählen

if os.path.splitext(filename).lower() in ('.py', '.php', 'txt'):
    pass

Verfasst: Sonntag 19. November 2006, 12:31
von EnTeQuAk
Ahhh ;)


An das '' in '' hab ich gar nicht gedacht.

@ Gerold:
Das mit dem '' file '' Objekt war nur Zeigeweise... heißt bei mir im Proggi anders.

Danke an euch! Nun gehts ;)


MfG EnTeQuAk

Verfasst: Montag 20. November 2006, 10:02
von N317V
Darf ich darauf hinweisen, dass die Dateiendung lediglich unter Windows relevant ist. Bei Mac und *nixen kann eine 'script.py' genausogut nur 'script' oder 'script.neu' oder sonstwie heißen.

Verfasst: Montag 20. November 2006, 12:28
von sape
N317V hat geschrieben:Darf ich darauf hinweisen, dass die Dateiendung lediglich unter Windows relevant ist. Bei Mac und *nixen kann eine 'script.py' genausogut nur 'script' oder 'script.neu' oder sonstwie heißen.
Hm, dan müsste man am besten die Headline auslesen oder? Oder wie kriegt man raus obs ein python script ist?

lg

Verfasst: Montag 20. November 2006, 13:38
von Blattlaus
Nun, am einfachsten und besten wäre es wohl, einfach dranzuschreiben, dass man gefälligst ein Python Script übergeben soll.

Man kann - und muss - nicht jeden möglichen Fehler des Benutzers abfangen. Wenn du da ein Python-Script erwartet, dann hat der User dir eins zu geben. Und wenn die bei ihm eben .python.script heißen, ist das für dich auch okay.
Wenn der Depp allerdings daherkommt und dir ne Worddatei gibt, dann wirst du das merken, wenn du versuchst irgendwas damit zu machen.
Die Exception kannst du dann abfangen und dem Deppenuser mitteilen, er möge doch ein Python Script übergeben.

Man muss nicht jeden Mist im vorraus prüfen, Exception bieten einem da eine viel schönere Möglichkeit.

Eine gesunde Portion Arroganz kann man sich als Softwareentwickler schon zulegen. Wenn man ein Modul schreibt und dieses Modul funktioniert nur, wenn man ein "foo" übergibt, dann geht es eben nur damit. Wenn man ein "bar" bekommt, hat es keinen Sinn daraus noch etwas sinnvolles basteln zu wollen. Sofern man die Schnittstellen ordentlich deklariert und dokumentiert ist sowas vollständig in Ordnung.
Das ganze nennt sich übrigens Post-/Precondition. Man definiert was vorher gegen sein muss und sagt was hinterher rauskommt, das garantiert man dann allerdings. Ala: "Gib mir Steine und Zement und ich bau dir ein Haus das nicht umfällt", wenn man dann Styrophor und Pattex bekommt...nunja, was hausähnliches kommt raus ;)

Verfasst: Montag 20. November 2006, 14:02
von Rebecca
XtraNine hat geschrieben:
N317V hat geschrieben:Darf ich darauf hinweisen, dass die Dateiendung lediglich unter Windows relevant ist. Bei Mac und *nixen kann eine 'script.py' genausogut nur 'script' oder 'script.neu' oder sonstwie heißen.
Hm, dan müsste man am besten die Headline auslesen oder? Oder wie kriegt man raus obs ein python script ist?

lg
Unter Linux muessen Scripte noch nichtmal eine magische erste Zeile besitzen. Wenn ich in die Shell eintippe:

Code: Alles auswählen

> python bla.blupp
ist es Linux total egal, was bla.blupp fuer eine Datei ist. Der Python-Interpreter versucht sie auszufuehren, und wenn da lauter Perl-Befehle drin stehen, meckert der Python-Interpreter halt. Die magische erste Zeile braucht man nur, wenn man einfach nur das hier tippen will:

Code: Alles auswählen

> bla.blupp
So aehnlich wuerde ich es in deinem Script auch machen, wie Blattlaus ja auch sagt.

Verfasst: Montag 20. November 2006, 14:12
von jens
Rebecca hat geschrieben:Unter Linux muessen Scripte noch nichtmal eine magische erste Zeile besitzen. Wenn ich in die Shell eintippe:

Code: Alles auswählen

> python bla.blupp
Das ist unter Windows nicht anders :)

Der Unterschied liegt viel mehr im Shebang. Ist der richtig gesetzt kann ich unter Linux einfach das Skript starten, egal wie die Endung ist. Windows wertet aber den Shebang nicht aus und richtet sich nur nach der Dateiendung...

Verfasst: Montag 20. November 2006, 17:38
von birkenfeld
jens hat geschrieben:Der Unterschied liegt viel mehr im Shebang. Ist der richtig gesetzt kann ich unter Linux einfach das Skript starten, egal wie die Endung ist.
Man sollte dazusagen, dass die Datei dazu auch als ausführbar gekennzeichnet sein muss (man chmod).