.startwith / oder \

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
Fimbur
User
Beiträge: 16
Registriert: Donnerstag 23. September 2021, 23:15

Hallo,
ist es möglich .startwith zwei Parameter zu geben? Also wenn eine String mit / oder \ anfängt, dann soll eine Funktion ausgeführt werden.

Code: Alles auswählen

if pfad.startswith("/"):
	print("Test")
Ich möchte, wenn der Pfad mit / oder \ anfängt, dass print ausgeführt wird.

Danke für Eure Hilfe.
Benutzeravatar
__blackjack__
User
Beiträge: 13068
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Fimbur: Es sieht so aus als würdest Du eigentlich ein `pathlib.Path`-Objekt verwenden wollen und dort dessen `is_absolute()`-Methode:

Code: Alles auswählen

if path.is_absolute():
    print("Test")
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@Fimbur: Pfade sind keine normalen Strings. Benutze pathlib.Path.
Gerade Windows-Pfade fangen normalerweise ja mit sowas wie D: an, da ist ein Test auf \ wenig hilfreich.
Die passende Methode heißt dann is_absolute:

Code: Alles auswählen

if pfad.is_absolute():
    print("Test")
Fimbur
User
Beiträge: 16
Registriert: Donnerstag 23. September 2021, 23:15

Sirius3 hat geschrieben: Dienstag 28. September 2021, 09:34 @Fimbur: Pfade sind keine normalen Strings. Benutze pathlib.Path.
Gerade Windows-Pfade fangen normalerweise ja mit sowas wie D: an, da ist ein Test auf \ wenig hilfreich.
Die passende Methode heißt dann is_absolute:

Code: Alles auswählen

if pfad.is_absolute():
    print("Test")
Danke für deine Hilfe. Ich lerne Python noch, deswegen weiß ich noch nicht so gut bescheid.

Ich möchte das Script für Linux und Windows User schreiben. Möchte aber sicher gehen, dass auch wirklich ein Pfad eingegeben wird.

Habe es so gelöst:

Code: Alles auswählen

if os.path.isabs(pfad):
	print("Mach was")
Ist das so in Ordnung?
Benutzeravatar
DeaD_EyE
User
Beiträge: 1016
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Code: Alles auswählen

starts = ("[ ", "! ", "!! ")

text_test = ("[ Test 1", "! Test 2", "!! Test 3", "!!Test 4", "@ Test 5")

for text in text_test:
    if any(map(text.startswith, starts)):
        print(text)

Das Beispiel enthält mit Absicht keine Pfade, da es pathlib.Path gibt und man das auch nutzen sollte.
Außerdem kann man so auch Pfade Betriebssystemübergreifend ohne Probleme zusammensetzen.

Ich wollte nur mal zeigen, wie das geht.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
__blackjack__
User
Beiträge: 13068
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Fimbur: Jain. Warum verwendest Du das alte `os.path` wenn es das neue `pathlib` gibt?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@DeaD_EyE: das ist viel zu kompliziert. startswith kann als Argument Tuple verarbeiten.
Fimbur
User
Beiträge: 16
Registriert: Donnerstag 23. September 2021, 23:15

__blackjack__ hat geschrieben: Dienstag 28. September 2021, 14:35 @Fimbur: Jain. Warum verwendest Du das alte `os.path` wenn es das neue `pathlib` gibt?
Weil ich noch lerne. Habe mich in Google informiert und dort bin ich auf die Version gestoßen, die ich verwendet habe.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1016
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Sirius3 hat geschrieben: Dienstag 28. September 2021, 15:06 @DeaD_EyE: das ist viel zu kompliziert. startswith kann als Argument Tuple verarbeiten.
Ich glaube das hatte ich schon mal. Das steht sogar in der Hilfe.
In [5]: str.startswith?
Docstring:
S.startswith(prefix[, start[, end]]) -> bool

Return True if S starts with the specified prefix, False otherwise.
With optional start, test S beginning at that position.
With optional end, stop comparing S at that position.
prefix can also be a tuple of strings to try.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Buchfink
User
Beiträge: 193
Registriert: Samstag 11. September 2021, 10:16

@_blackjack_
ich kann hier zwar nix beitragen, aber dennoch möchte ich mich für den Hinweis bedanken.
Ich nutze auch noch os, weil das in den Tutorials so "drin" ist. Da muss ich mich mal schlau googeln, was da der Unterschied ist zu pathlib.
einfachTobi
User
Beiträge: 491
Registriert: Mittwoch 13. November 2019, 08:38

Die Tutorials sind halt tendenziell alt. Als Gedankenhilfe hat die offizielle Python Doku eine gute Übersicht über die jeweils entsprechenden Funktionen: https://docs.python.org/3/library/pathl ... -os-module.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Den Link kann ich nur empfehlen. Zwar lässt sich mit os, os.path und glob auch alles hinbekommen, was mit Path möglich ist. Mit Path ist es aber teils deutlich bequemer und die Möglichkeit Fehler zu machen wird geringer.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1016
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Das ist auch ganz gut (englisch): https://realpython.com/python-pathlib/
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten