os.path.join

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
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Die Funktion liefert unter Windows ja ``\`` statt ``/``. Kann man dieses verhalten steuern, sodass ich immer ``/`` erhalte?

Ich finde

Code: Alles auswählen

os.path.join(path1, path2).replace('\\', '/')
irgendwie unschön.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Dann kannst du auch einfach ``/`` als Trenner nehmen -> ``"/".join(path1, path2)``

Aber warum willst du ueberhaupt dieses Verhalten?
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Ich war dabei für Bottle eine Art kleinen Filebrowser zu schreiben. Für das Zusammensetzen vom Pfad hatte ich ``os.path.join`` verwendet. Bottle mag aber keine ``\`` in den URL und deshalb hatte ich es bisher mit replace in ``/`` gewandelt.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Man kann wohl auch unter Windows ``posixpath`` importieren, ebenso wie man unter Unix auch ``ntpath`` importieren kann.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Und warum benutzt du ueberhaupt ``os.path.join`` wenn es um URL geht? Das sind nunmal Slashes und das plattform-unabhaengig.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

weil os.path.join mehr macht als ``'/'.join`` und mir das halt bekannt war für das Zusammensetzen von Pfaden
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

jbs hat geschrieben:weil os.path.join mehr macht als ``'/'.join``

Code: Alles auswählen

def join(a, *p):
    """Join two or more pathname components, inserting '/' as needed.
    If any component is an absolute path, all previous path components
    will be discarded."""
    path = a
    for b in p:
        if b.startswith('/'):
            path = b
        elif path == '' or path.endswith('/'):
            path +=  b
        else:
            path += '/' + b
    return path
Das ist der Code von ``posixpath.join`` der von ``ntpath.join`` enthaelt nur noch eine ueberpruefung des Laufwerkbuchstabens.
Das tut nicht viel mehr als das join. Es sei denn natuerlich du willst mit absoluten Pfaden jonglieren
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

jbs hat geschrieben:weil os.path.join mehr macht als ``'/'.join`` und mir das halt bekannt war für das Zusammensetzen von Pfaden
Es gibt ja auch urlparse.urljoin() ;-)
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

jbs hat geschrieben:Bottle mag aber keine ``\`` in den URL und deshalb hatte ich es bisher mit replace in ``/`` gewandelt.
Mag an der Urzeit liegen, aber warum mag Bottle kein '\' in URLs? Bottle ist der Inhalt einer URL eigentlich ziemlich egal. Die einzige Besonderheit, die mir ein fällt, ist, das einfache Platzhalter von einem '/' terminiert werden, aber nicht von einem '\'. Das kann man aber recht einfach mit regexp-Platzhaltern lösen: r':platzhalter:^[\\/]+:'
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

schande über mich.
ich hab jetzt ``'/'.join`` genommen
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Antworten