2017-04-07 2 views
2

Ich habe eine Eingabedatei mit einem String, der doppelte Anführungszeichen enthält, und möchte eine C-Style-Header-Datei mit Python erzeugen.Python: 'Backslash-Anführungszeichen' in Datei schreiben

Sprich

input file: Hello "Bob" 
output file: Hello \"Bob\" 

ich nicht den Code schreiben kann eine solche Datei zu erhalten, hier ist was ich bisher versucht habe:

key = 'key' 
val = 'Hello "Bob"' 
buf_list = list() 
... 
val = val.replace('"', b'\x5c\x22') 
# also tried: val = val.replace('"', r'\"') 
# also tried: val = val.replace('"', '\\"') 
buf_list.append((key + '="' + val + '";\n').encode('utf-8')) 
... 
for keyval in buf_list: 
    lang_file.write(keyval) 
lang_file.close() 

Die Ausgabedatei enthält immer:

Hello \\\"Bob\\\" 

ich hatte keine Probleme \n, \t Strings in die Ausgabedatei zu schreiben.

Es scheint, ich kann nur null oder zwei Backslashes schreiben, kann jemand bitte helfen?

Antwort

0

Die Umwandlung von String in Raw String während des Austauschs sollte tun.

a='Hello "Bob"' 
print a.replace('"', r'\"') 

Die oben geben Ihnen: Hello \"Bob\"

+0

Bereits ausprobiert, siehe meinen Code. Dies funktioniert mit der 'print' Funktion, aber nicht beim Schreiben in eine Datei. – maestun

+0

@maestun - Funktioniert gut auf meiner Seite. –

+0

versuchen Sie dies: 'key = 'key'; val = 'Hallo "Bob"'; buf_list = Liste(); val = val.replace (' "', r '\"'); h = offen ('temp.txt', 'w'); h.write (val); h.close(); ' –

1

Sie sowohl die doppelten Anführungszeichen und den Backslash entkommen müssen. Folgendes funktioniert für mich (unter Verwendung von Python 2.7):

with open('temp.txt', 'r') as f: 
    data = f.read() 

with open('temp2.txt', 'w') as g: 
    g.write(data.replace('\"', '\\\"')) 
+0

Danke, das funktioniert. Allerdings ist die Art der Zeichenfolgen, die ich in die Datei schreiben muss ähnlich: 'Schlüssel =" Wert mit \ Anführungszeichen \ "" ' und Ihr Code wird offensichtlich produzieren: ' Schlüssel = \ "Wert mit \ Anführungszeichen \" \ "' ... Fast da :) – maestun

+0

@maestun Sie müssen eine Art Vorverarbeitung tun, um die Anführungszeichen zu trennen, die Sie nicht von den Anführungsstrichen ändern möchten, die Sie ändern möchten. – asongtoruin

+0

Ja, ich werde das tun, danke! – maestun