Seite 1 von 1

.startwith / oder \

Verfasst: Dienstag 28. September 2021, 09:12
von Fimbur
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.

Re: .startwith / oder \

Verfasst: Dienstag 28. September 2021, 09:31
von __blackjack__
@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")

Re: .startwith / oder \

Verfasst: Dienstag 28. September 2021, 09:34
von Sirius3
@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")

Re: .startwith / oder \

Verfasst: Dienstag 28. September 2021, 13:45
von Fimbur
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?

Re: .startwith / oder \

Verfasst: Dienstag 28. September 2021, 14:29
von DeaD_EyE

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.

Re: .startwith / oder \

Verfasst: Dienstag 28. September 2021, 14:35
von __blackjack__
@Fimbur: Jain. Warum verwendest Du das alte `os.path` wenn es das neue `pathlib` gibt?

Re: .startwith / oder \

Verfasst: Dienstag 28. September 2021, 15:06
von Sirius3
@DeaD_EyE: das ist viel zu kompliziert. startswith kann als Argument Tuple verarbeiten.

Re: .startwith / oder \

Verfasst: Dienstag 28. September 2021, 15:18
von Fimbur
__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.

Re: .startwith / oder \

Verfasst: Dienstag 28. September 2021, 16:02
von DeaD_EyE
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.

Re: .startwith / oder \

Verfasst: Mittwoch 29. September 2021, 20:28
von Buchfink
@_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.

Re: .startwith / oder \

Verfasst: Donnerstag 30. September 2021, 09:03
von einfachTobi
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.

Re: .startwith / oder \

Verfasst: Donnerstag 30. September 2021, 10:50
von kbr
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.

Re: .startwith / oder \

Verfasst: Freitag 1. Oktober 2021, 07:30
von DeaD_EyE
Das ist auch ganz gut (englisch): https://realpython.com/python-pathlib/