Ist das Logisch richtig?

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
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

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
Benutzeravatar
Whitie
User
Beiträge: 216
Registriert: Sonntag 4. Juni 2006, 12:39
Wohnort: Schulzendorf

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
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
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

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
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

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.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

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
Benutzeravatar
Blattlaus
User
Beiträge: 55
Registriert: Donnerstag 24. August 2006, 08:55

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 ;)
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

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.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

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).
Antworten