Im Pfad die Position des 4. Backslashes von rechts ermitt..

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
Sinnentlehrt
User
Beiträge: 67
Registriert: Mittwoch 30. Januar 2013, 22:32

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
Du weißt das du vergessen hast einzukaufen, wenn du dich morgens mit Geschirrspülmittel duscht.
BlackJack

@Sinnentlehrt: Man könnte `os.path.split()` mehrfach anwenden.
Sinnentlehrt
User
Beiträge: 67
Registriert: Mittwoch 30. Januar 2013, 22:32

Oh je, wenn der Vorschlag von dir kommt dann ist wohl mit keiner besseren Idee zu rechnen. :roll:
Na ja, dann werde ich wohl in den sauren Apfel beißen.

Danke BlackJack.
Du weißt das du vergessen hast einzukaufen, wenn du dich morgens mit Geschirrspülmittel duscht.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Sinnentlehrt
User
Beiträge: 67
Registriert: Mittwoch 30. Januar 2013, 22:32

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
Du weißt das du vergessen hast einzukaufen, wenn du dich morgens mit Geschirrspülmittel duscht.
Rigoletto
User
Beiträge: 28
Registriert: Freitag 14. Februar 2014, 21:05

Wie wärs mit

Code: Alles auswählen

path.split(os.sep(), <anzahl abschnitte>)
und danach wieder mit

Code: Alles auswählen

os.path.join()
zusammenkleben.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

`.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.
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.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Rigoletto hat geschrieben:

Code: Alles auswählen

path.split(os.sep(), <anzahl abschnitte>)
os.sep ist ein String, keine Funktion.
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.
Sinnentlehrt
User
Beiträge: 67
Registriert: Mittwoch 30. Januar 2013, 22:32

habe es mir noch mal woanders zeigen lassen und das ist raus gekommen.

Code: Alles auswählen

forum_link = '/'.join(pfad_sammlung[-2:]
bringt das gewünschte Ergebniss. Würde auch das hier gehen? Statt Slash, os.sep?

Code: Alles auswählen

forum_link = 'os.sep'.join(pfad_sammlung[-2:]
Du weißt das du vergessen hast einzukaufen, wenn du dich morgens mit Geschirrspülmittel duscht.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@Sinnentlehrt: Du scheinst wirklich keine Ratschläge anzunehmen. Für Pfade gibt es das Modul os.path!

Code: Alles auswählen

forum_link = os.path.join(*pfad_sammlung[-2:])
Und wenn Du noch irgendwo anders in Deinem Programm direkt mit Stringoperationen auf einen Pfad zugreifst, hast Du einen potentiellen Fehler!
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Sinnentlehrt hat geschrieben:

Code: Alles auswählen

forum_link = 'os.sep'.join(pfad_sammlung[-2:]
os.sep != 'os.sep'
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

@/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'
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.
Sinnentlehrt
User
Beiträge: 67
Registriert: Mittwoch 30. Januar 2013, 22:32

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. :roll: Aber Danke für die Zeit und die Mühe die ihr aufwendet.

Gruß,

sinnie
Du weißt das du vergessen hast einzukaufen, wenn du dich morgens mit Geschirrspülmittel duscht.
Antworten