os.path.expanduser Doppelter Slash in Windows

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
Pyranha83
User
Beiträge: 4
Registriert: Donnerstag 4. Oktober 2018, 12:17

Hallo,

Leider konnte ich weder im Forum noch im Netz etwas zu diesem Problem finden.

Mein Benutzer-Verzeichnis unter Windows 10 liegt unter C:\Users\USER

Die Funktion so.path.expanduser("~") liefert mysteriöser Weise

C:\\Users\\USER

Zurück und so kann das Verzeichnis natürlich nicht gefunden werden.

Hat jemand schon einmal ein Ähnliches Problem gehabt und weiß wie ich den richtigen Pfad extrahieren kann?
__deets__
User
Beiträge: 14540
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist doch der richtige Pfad. Da sind halt doppelte slashes, weil backslash der escape-Character ist:

Code: Alles auswählen

>>> "\\test"
"\\test"
>>> print("\\test")
\test
Insofern ist das erstmal korrekt.
Pyranha83
User
Beiträge: 4
Registriert: Donnerstag 4. Oktober 2018, 12:17

Über Print kommt das richtige, ist auch nicht das Problem

Problem ist das bei Return in einer Funktion trotzdem beide slashes ausgegeben werden und die Funktion damit den falschen Pfad generiert
Pyranha83
User
Beiträge: 4
Registriert: Donnerstag 4. Oktober 2018, 12:17

Das kann doch nicht sein das Print und Return unterschiedliche Ergebnisse liefern.

Hast du eine Idee wie ich das Problem lösen kann?
__deets__
User
Beiträge: 14540
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du hast kein Problem. Du denkst nur du hast eines. Return liefert kein anderes Ergebnis. Alles, was da passiert, ist, dass dir die Repraesentation des Strings angezeigt wird. Kannst du emulieren mit print(repr(derstring)). Das ist ein Feature von Python, mit dem man die Ausgabe von Objekten einfach kopieren und wieder zu den Objekten machen kann. Genauso, wie eine Liste auch ausgegeben wird mit eckigen Klammern drumrum, etc.

Um das noch mal GANZ deutlich zu sagen: der String hat genau EIN backslash genau an der Stelle, an der du das erwartest. Die String-DARSTELLUNG im INTERPRETER ist eine, die so aussieht, wie sie aussehen MUSS, wenn du ein Stringliteral eingeben willst, das auch Backslashes enthaelt.

Was wuerde denn sonst passieren, wenn dein User nono hiesse? Kannst ja mal probieren, was

>>> "ich bin \nono"

vs

>>> print("ich bin \nono")

ausgibt, und wor da genau der Unterschied liegt.
Pyranha83
User
Beiträge: 4
Registriert: Donnerstag 4. Oktober 2018, 12:17

Danke für die ausführliche Antwort

Mal ganz blöd gefragt: wenn ich mir den Escape Character anzeigen lassen kann mit Print repr, kann ich mir den escape character auch ausblenden lassen bei Return? Gibt es dafür eine Funktion?
__deets__
User
Beiträge: 14540
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nochmal: du hast keinen escape Charakter in dem Return. Du hast einen String mit genau einem backslash. Du musst nichts tun. Wirklich nicht.
Antworten