String: Ersetzen von Backslash als Slash

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

rumpie hat geschrieben:

Code: Alles auswählen

#!/usr/bin/python

import _winreg, ConfigParser, subprocess, os

if __name__ == '__main__':
    InstallPath = "c:\Program Files"
    RelExe = "7-Zip\7zFM.exe"
    Exe1 = os.path.join(InstallPath, RelExe)
    print Exe1
    subprocess.Popen([Exe1])
Arghhhhh!

Hier liest du die Strings ja auch nicht aus einer Datei oder meinetwegen aus der Registry sondern definierst sie im Sourcecode. Hier müsstest du die Strings natürlich entweder als "7-Zip\\7zFM.exe" oder r"7-Zip\7zFM.exe" definieren um im daraus resultierenden String genau einen Backslash zu haben.

Schau dir bitte an wie die Repräsentation der Strings aussieht:

Code: Alles auswählen

>>> r"7-Zip\7zFM.exe"
'7-Zip\\7zFM.exe'
>>> "7-Zip\7zFM.exe"
'7-Zip\x07zFM.exe'
Im zweiten String steht jetzt nicht die Zeichensequenz "\ x 0 7". Das ist nur die Darstellung des einen Zeichens das dort steht und das keine druckbare Entsprechung hat, nämlich das Zeichen mit dem ASCII-Code 7.
rumpie
User
Beiträge: 11
Registriert: Montag 17. August 2009, 14:25

/me hat geschrieben:
rumpie hat geschrieben:

Code: Alles auswählen

#!/usr/bin/python

import _winreg, ConfigParser, subprocess, os

if __name__ == '__main__':
    InstallPath = "c:\Program Files"
    RelExe = "7-Zip\7zFM.exe"
    Exe1 = os.path.join(InstallPath, RelExe)
    print Exe1
    subprocess.Popen([Exe1])
Arghhhhh!

Hier liest du die Strings ja auch nicht aus einer Datei oder meinetwegen aus der Registry sondern definierst sie im Sourcecode. Hier müsstest du die Strings natürlich entweder als "7-Zip\\7zFM.exe" oder r"7-Zip\7zFM.exe" definieren um im daraus resultierenden String genau einen Backslash zu haben.

Schau dir bitte an wie die Repräsentation der Strings aussieht:

Code: Alles auswählen

>>> r"7-Zip\7zFM.exe"
'7-Zip\\7zFM.exe'
>>> "7-Zip\7zFM.exe"
'7-Zip\x07zFM.exe'
Im zweiten String steht jetzt nicht die Zeichensequenz "\ x 0 7". Das ist nur die Darstellung des einen Zeichens das dort steht und das keine druckbare Entsprechung hat, nämlich das Zeichen mit dem ASCII-Code 7.
Ja, ist hier nur als (schlechtes) Beispiel drin. Ich lese beide Strings aus der Registry bzw. einer ini-Datei - siehe obere Antwort.
Ich wollte damit nur anzeigen, wie ich es lösen konnte, nämlich meinen Eintrag (den in der ini-Datei) konnte ich anpassen, der in der Registry mit den Backslash als Pfadtrenner drin muss ich nehmen wie er ist.
Das Problem (was du auch noch mal aufzeigtest) habe ich verstanden gehabt...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

rumpie hat geschrieben:Ja, ist hier nur als (schlechtes) Beispiel drin. Ich lese beide Strings aus der Registry bzw. einer ini-Datei - siehe obere Antwort.
In dem Fall sollte das "Problem" niemals auftauchen.
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

rumpie hat geschrieben:Ja, ist hier nur als (schlechtes) Beispiel drin. Ich lese beide Strings aus der Registry bzw. einer ini-Datei - siehe obere Antwort.
Das einzige brauchbare Beispiel an der Stelle ist genau das zu tun. Schreibe die Strings in eine Datei, lies sie wieder aus und versuch deinen Code _damit_.
rumpie hat geschrieben:Das Problem (was du auch noch mal aufzeigtest) habe ich verstanden gehabt...
Dem wuerde ich nicht zustimmen ...
WE_Coder
User
Beiträge: 1
Registriert: Dienstag 13. Oktober 2020, 08:20

Ich hatte dieses Problem mit filedialog.askdirctory() und dem Backslash auch. Die Lösung ist aber eigentlich ganz einfach:

Code: Alles auswählen

>>> from tkinter import filedialog
>>> system_pfad = filedialog.askdirectory(title = "Ordner wählen")
>>> print(system_pfad)
C:/Windows/System
>>> pfad_neu = system_pfad.replace("/", "\\")
>>> print(pfad_neu)
C:\Windows\System
>>>
Über Sinn und Unsinn dieser Methode will ich gar nicht diskutoeren. Bei mit hat das so wunderbar funktioniert :D
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und das ist dir so wichtig, das du dafür einen 8 Jahre alten Thread exhumierest?!
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Und das ist auch ein ganz anderes ”Problem”. Letztlich ist das überhaupt kein Problem, weil die Windows-API auch den / als Pfadtrenner akzeptiert.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten