Seite 1 von 1
Im Pfad die Position des 4. Backslashes von rechts ermitt..
Verfasst: Sonntag 16. Februar 2014, 22:37
von Sinnentlehrt
Hallo Leute,
wohl ein Fall für die regular espressions. Habe mit findall oder split nichts passendes gefunden, bzw. nicht begriffen wie ich diese sinvoll einsetzen soll.
Hier der Pfad:
/Ordner1/Ordner2/Ordner3/Ordner4/Ordner5/Ordner6/Datei.txt
Die Frage noch mal:
Wie kriege ich die Position für den 4. Backslash raus, also den zwischen Ordner3 und Ordner4, von rechts gezählt.
Schon mal danke für die Hilfe.
Gruss,
Sinnie
Re: Im Pfad die Position des 4. Backslashes von rechts ermit
Verfasst: Sonntag 16. Februar 2014, 23:21
von BlackJack
@Sinnentlehrt: Man könnte `os.path.split()` mehrfach anwenden.
Re: Im Pfad die Position des 4. Backslashes von rechts ermit
Verfasst: Sonntag 16. Februar 2014, 23:32
von Sinnentlehrt
Oh je, wenn der Vorschlag von dir kommt dann ist wohl mit keiner besseren Idee zu rechnen.
Na ja, dann werde ich wohl in den sauren Apfel beißen.
Danke BlackJack.
Re: Im Pfad die Position des 4. Backslashes von rechts ermit
Verfasst: Montag 17. Februar 2014, 07:18
von Sirius3
@Sinnentlehrt: Du willst sicher nicht die Position des vierten Slashs ermitteln, sondern den Pfad nach bestimmten Regeln aufteilen. Welche Regel ist das?
Für Pfade bearbeiten gibt es "os.path", alles andere, wie direkte Zeichenkettenoperationen, würde die Feinheiten des jeweiligen Filesystems ignorieren und zu Fehlern führen.
Re: Im Pfad die Position des 4. Backslashes von rechts ermit
Verfasst: Montag 17. Februar 2014, 17:14
von Sinnentlehrt
Hi Sirius,
Ich möchte einen relativen Link in einer Datenbank speichern.
Der Link soll bestehen aus zwei Elementen: Ordner und Datei Name. Die Pfadangabe aus der der Link entstehen soll ist eher variabel bis auf die letzten zwei Elemente. Darum das Zählen von rechts.
Ich habe es jetzt mal mit rsplit probiert, leider bin ich wohl unfähig den Ausdruck richtig anzuwenden.
Codebeispiel:
Code: Alles auswählen
pfad_sammlung = karten_file.rsplit('/',2)
for s in pfad_sammlung:
rest = s[0]
ordner_name_pfad = s[1]
datei_name_pfad = s[2]
forum_link = ordner_name_pfad + os.sep + datei_name_pfad
forum_link = str(forum_link)
gprint("Forum Link:"+forum_link)
karten_file = str(karten_file)
gprint("Karten File:"+karten_file)
pfad_sammlung = str(pfad_sammlung)
gprint("Pfad Sammlung:"+pfad_sammlung)
gprint("Ordner Name:"+ordner_name_pfad)
gprint("Datei Name:"+datei_name_pfad)
Die Variablen passen wohl, nur rsplit kommt nicht mit Sonderzeichen klar (Zerlegt mir ein ö, siehe Zeile 5) und ordner_name_pfad sowie datei_name_pfad bestehen nur aus jeweils einem Buchstaben.
Code: Alles auswählen
Forum Link:ö/n
Karten File:/opt/lampp/htdocs/forum1/speika_emsdetten_test_Inhalt/DönerTest-Inhalt-025478-654645-Schneller-Weg-52-Emsdetten.php
Pfad Sammlung:[u'/opt/lampp/htdocs/forum1', u'speika_emsdetten_test_Inhalt', u'D\xf6nerTest-Inhalt-025478-654645-Schneller-Weg-52-Emsdetten.php']
Ordner Name:ö
Datei Name:n
Wie bringe ich rsplit utf8 bei? Steht natürlich schon im Kopf der Datei. Und wie bediene ich rsplit überhaupt.
Gruss,
Sinnie
Re: Im Pfad die Position des 4. Backslashes von rechts ermit
Verfasst: Montag 17. Februar 2014, 17:19
von Rigoletto
Wie wärs mit
und danach wieder mit
zusammenkleben.
Re: Im Pfad die Position des 4. Backslashes von rechts ermit
Verfasst: Montag 17. Februar 2014, 17:24
von snafu
`.rsplit()` kommt sehr wohl mit Umlauten klar. Der Fehler ist vielmehr deine Schleife. Lass die weg und greife direkt auf `pfad_sammlung` zu. Dann wirst du auch erwartungsgemäße Ergebnisse erhalten.
Re: Im Pfad die Position des 4. Backslashes von rechts ermit
Verfasst: Montag 17. Februar 2014, 17:27
von BlackJack
@Sinnentlehrt: Wie Sirius3 schon sagte: Auf Pfade möglichst keine reinen Zeichenkettenoperationen anwenden wenn es in `os.path` etwas passendes auf Pfade zugeschnittenes gibt. Und das ist `os.path.split()` und nicht `rsplit()` auf Zeichenketten.
Re: Im Pfad die Position des 4. Backslashes von rechts ermit
Verfasst: Montag 17. Februar 2014, 17:33
von /me
Rigoletto hat geschrieben:
os.sep ist ein String, keine Funktion.
Re: Im Pfad die Position des 4. Backslashes von rechts ermit
Verfasst: Montag 17. Februar 2014, 17:43
von BlackJack
Und nur um es an dem Beispiel noch mal zu veranschaulichen: Das funktioniert nicht zuverlässig weil `os.sep` nicht die einzige Möglichkeit sein muss um Pfadteile zu trennen. Bei Windows ist es das zum Beispiel nicht.
Re: Im Pfad die Position des 4. Backslashes von rechts ermit
Verfasst: Dienstag 18. Februar 2014, 15:04
von Sinnentlehrt
habe es mir noch mal woanders zeigen lassen und das ist raus gekommen.
bringt das gewünschte Ergebniss. Würde auch das hier gehen? Statt Slash, os.sep?
Re: Im Pfad die Position des 4. Backslashes von rechts ermit
Verfasst: Dienstag 18. Februar 2014, 15:31
von Sirius3
@Sinnentlehrt: Du scheinst wirklich keine Ratschläge anzunehmen. Für Pfade gibt es das Modul os.path!
Und wenn Du noch irgendwo anders in Deinem Programm direkt mit Stringoperationen auf einen Pfad zugreifst, hast Du einen potentiellen Fehler!
Re: Im Pfad die Position des 4. Backslashes von rechts ermit
Verfasst: Dienstag 18. Februar 2014, 15:35
von /me
Sinnentlehrt hat geschrieben:
os.sep != 'os.sep'
Re: Im Pfad die Position des 4. Backslashes von rechts ermit
Verfasst: Dienstag 18. Februar 2014, 15:42
von cofi
@/me: Aber hat doch auch ganz huebsche Ergebnisse!
Code: Alles auswählen
In [2]: 'os.sep'.join(['path', 'to', 'happyness'])
Out[2]: 'pathos.septoos.sephappyness'
Re: Im Pfad die Position des 4. Backslashes von rechts ermit
Verfasst: Dienstag 18. Februar 2014, 16:05
von BlackJack
@Sirius3: Wobei ich hier vorsichtig wäre, denn `forum_link` hört sich so an als wenn das mit Backslashes auch falsch sein kann und man an der Stelle tatsächlich '/' als Trenner haben will, eben weil es kein Pfad sondern ein Link/eine URL ist.
Re: Im Pfad die Position des 4. Backslashes von rechts ermit
Verfasst: Dienstag 18. Februar 2014, 19:38
von Sinnentlehrt
sirius3, alles klar, wende jetzt os.path.join an. Das mit nicht auf Ratschläge eingehen ist leider keine Absicht, ich kann einfach oft deine Ratschläge oder die von anderen nicht nachvollziehen(Begreifen wohl....). Weil mir fehlen wohl viele einfache Grundlagen um sie auch Umzusetzen. Ich habe mir für meine nächsten Postings vorgenommen noch mal extra darauf hinzuweisen mir nach Möglichkeit in ganzen Beispielen zu antworten.
Ja, das ist nervig für den zu Antwortenden und ich könnte ja noch mal einen Kurs durcharbeiten, aber mein Projekt steht kurz vor dem Abschluß und es ist dann die Frage ob es überhaupt seine Erwartungen erfüllen kann. Also werde ich es mal so durchquetschen und dann bei Gelegenheit mir noch mal die Grundlagen wieder antun. Wahrscheinlich ist der Python Teil sowieso jetzt zu 95% oder sogar zu 100% durch.

Aber Danke für die Zeit und die Mühe die ihr aufwendet.
Gruß,
sinnie