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
Im Pfad die Position des 4. Backslashes von rechts ermitt..
-
- User
- Beiträge: 67
- Registriert: Mittwoch 30. Januar 2013, 22:32
Du weißt das du vergessen hast einzukaufen, wenn du dich morgens mit Geschirrspülmittel duscht.
-
- 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.
Na ja, dann werde ich wohl in den sauren Apfel beißen.
Danke BlackJack.
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.
@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.
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.
-
- 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:
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.
Wie bringe ich rsplit utf8 bei? Steht natürlich schon im Kopf der Datei. Und wie bediene ich rsplit überhaupt.
Gruss,
Sinnie
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)
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
Gruss,
Sinnie
Du weißt das du vergessen hast einzukaufen, wenn du dich morgens mit Geschirrspülmittel duscht.
Wie wärs mit
und danach wieder mit
zusammenkleben.
Code: Alles auswählen
path.split(os.sep(), <anzahl abschnitte>)
Code: Alles auswählen
os.path.join()
`.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.
@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.
os.sep ist ein String, keine Funktion.Rigoletto hat geschrieben:Code: Alles auswählen
path.split(os.sep(), <anzahl abschnitte>)
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.
-
- User
- Beiträge: 67
- Registriert: Mittwoch 30. Januar 2013, 22:32
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?
Code: Alles auswählen
forum_link = '/'.join(pfad_sammlung[-2:]
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.
@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!
Code: Alles auswählen
forum_link = os.path.join(*pfad_sammlung[-2:])
os.sep != 'os.sep'Sinnentlehrt hat geschrieben:Code: Alles auswählen
forum_link = 'os.sep'.join(pfad_sammlung[-2:]
- 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'
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
@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.
-
- 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. Aber Danke für die Zeit und die Mühe die ihr aufwendet.
Gruß,
sinnie
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
Du weißt das du vergessen hast einzukaufen, wenn du dich morgens mit Geschirrspülmittel duscht.