Problem "escaping" /configparser

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
drnicolas
User
Beiträge: 124
Registriert: Sonntag 24. Juli 2016, 10:32

Mein Problem:
Es muss ein Windows-kompatibler Netzwerkpfad zusammengebaut werden. Dieser wird dann in eine Oracle-DB geschrieben.

Der Pfad selber wird über configparser gelesen und in eine Variable gespeichert.

INI-Datei:
workdirectory = \\meinserver\docs

Es kommt leider momentan zu einer Verdoppelung der Backslashs und ich verstehe nicht warum

Die Variable ist als String deklariert.

Ich hatte schon probiert den Pfad in Anführungszeichen zu setzen. Dann erscheinen die Anführungszeichen aber in meinerm Netzwerkpfad.

Mache ich da was falsch?
ich muss einfach sicherstellen, dass ein originaler Pfad geneiert wird
Benutzeravatar
__blackjack__
User
Beiträge: 14237
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@drnicolas: Kann ich nicht nachvollziehen. INI-Datei:

Code: Alles auswählen

[section]
workdirectory = \\meinserver\docs
Einlesen:

Code: Alles auswählen

In [255]: cp = configparser.ConfigParser()

In [256]: cp.read_file(open("test.ini"))

In [257]: cp.get("section", "workdirectory")
Out[257]: '\\\\meinserver\\docs'

In [258]: print(cp.get("section", "workdirectory"))
\\meinserver\docs
“Ich bin für die Todesstrafe. Wer schreckliche Dinge getan hat, muss eine angemessene Strafe bekommen. So lernt er seine Lektion für das nächste Mal.” — Britney Spears, Interview in der französischen Zeitung Libération, 2. April 2002
Benutzeravatar
DeaD_EyE
User
Beiträge: 1297
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Ich vermute mal, dass du die Repräsentation meinst.
Bei der Repräsentation werden Strings mit Escape-Sequenzen dargestellt.

Wenn man den String mittels print in der Konsole ausgibt, werden die Escape-Sequenzen nicht im Klartext dargestellt. Die Sequenz \n fängt z.B. eine neue Zeile an. \r ist der Wagenrücklauf der Schreibmaschine, dass noch unter Windows verwendet wird. Naja, für HTTP und serielle Protokolle auch.

Sobald man mit dem umgekehrten Schrägstrich einen String erstellt, muss man genau aufpassen.
Das entfällt aber komplett, wenn man einfach mittels ConfigParser die ini-Datei einliest.

Drei Backslashes ergeben zwei Backslashes.

cfg["section"]["workdirectory"]
'\\\\meinserver\\docs'
print(cfg["section"]["workdirectory"])
\\meinserver\docs
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
drnicolas
User
Beiträge: 124
Registriert: Sonntag 24. Juli 2016, 10:32

Vielen Dank. Das habe ich abgeändert.
Nach einem ersten test scheint es zu funktionieren
avivadee
User
Beiträge: 6
Registriert: Donnerstag 3. Juli 2025, 06:51

Hallo! Das Verhalten liegt daran, wie Python mit Backslashes in Strings umgeht. Beim Einlesen mit configparser sollte der Wert tatsächlich so übernommen werden, wie er in der INI steht („workdirectory = \\meinserver\docs“). Wenn du den String aber z.B. mit print anzeigst, werden doppelte Backslashes oft im Debugging angezeigt, tatsächlich handelt es sich aber nur um einen einfachen Backslash im Wert. Am besten prüfst du das mit len(pfad) oder indem du den Wert direkt in eine Datei schreibst.
drnicolas
User
Beiträge: 124
Registriert: Sonntag 24. Juli 2016, 10:32

Okay, danke.
Das scheint jetzt so hinzukommen
Antworten