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

Ist das Logisch richtig?

Beitragvon EnTeQuAk » Sonntag 19. November 2006, 11:31

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: 111
Registriert: Sonntag 4. Juni 2006, 12:39
Wohnort: Schulzendorf

Beitragvon Whitie » Sonntag 19. November 2006, 11:51

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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Ist das Logisch richtig?

Beitragvon gerold » Sonntag 19. November 2006, 11:52

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

Beitragvon BlackJack » Sonntag 19. November 2006, 11:59

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:

Beitragvon EnTeQuAk » Sonntag 19. November 2006, 12:31

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

Beitragvon N317V » Montag 20. November 2006, 10:02

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

Beitragvon sape » Montag 20. November 2006, 12:28

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

Beitragvon Blattlaus » Montag 20. November 2006, 13:38

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:

Beitragvon Rebecca » Montag 20. November 2006, 14:02

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=]> python bla.blupp[/code]
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=]> bla.blupp[/code]
So aehnlich wuerde ich es in deinem Script auch machen, wie Blattlaus ja auch sagt.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Montag 20. November 2006, 14:12

Rebecca hat geschrieben:Unter Linux muessen Scripte noch nichtmal eine magische erste Zeile besitzen. Wenn ich in die Shell eintippe:
[code=]> python bla.blupp[/code]

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

CMS in Python: http://www.pylucid.org
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

Beitragvon birkenfeld » Montag 20. November 2006, 17:38

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder