2016-07-17 9 views
0

Ich arbeite mit einer Datei, die einige Zeilen mit Backslash-Zeichen wie "moz \\ 123 \\" enthält. Ich habe jede Zeile dann in einem Wörterbuch gespeichert und später mit der ursprünglichen Zeile in der Datei verglichen. Das Problem ist, dass Python in das Wörterbuch einen Schlüssel mit der doppelten Anzahl von umgekehrten Schrägstrichen eingibt (anstelle von "moz \\ 123 \\" bekomme ich "moz \\\\ 123 \\\\"), wenn ich den Vergleich zwischen die ursprüngliche Zeile und der Schlüssel im Wörterbuch, das Original kann nicht gefunden werden, weil der Schlüssel anders ist. Wie kann ich mit diesem Problem umgehen? Hier ist ein Code:Umgang mit Eingabe mit Backslashes in Python 3

my_dict={} 

def reader(): 
inputfile=open('<filepath>', 'r') 
for line in inputfile: 
    my_dict[line]=0 
print(my_dict) 

reader() 

wo Filepath enthält

the 
here 
moz\\12\\14 
the\ 

und die print-Anweisung gibt

{'here\n': 0, 'the\\': 0, 'the\n': 0, 'moz\\\\12\\\\14\n': 0}. 
+3

Python stellt einen umgekehrten Schrägstrich mit zwei Schrägstriche . (Nicht immer, aber in Ihrem Fall tut es das.) Die Backslashes sind wahrscheinlich nicht das Problem, wenn Sie KeyErrors bekommen, gibt es höchstwahrscheinlich einen anderen Grund. Bitte poste etwas Code. –

+0

Dies liegt daran, dass Symbole maskiert werden. Sie können sich so genannte rohe Zeichenketten ansehen. Als eine schnelle 'n' Dirty-Workaround können Sie jedoch eine 'str.replace()' wie beschrieben [hier auf SO] (http://stackoverflow.com/a/7262918/3991125) – albert

+1

'print ('moz \ \\\ 12 \\\\ 14 ') -> moz \\ 12 \\ 14 \ versuchen Sie es, dann denken Sie daran, dass Backslashes für Escape-Zeichen wie '\ n' verwendet werden, um einen umgekehrten Schrägstrich zu haben . –

Antwort

0

Oder einfach versuchen, zu ändern "\\" auf "//", wo der Dateipfad enthält:

the 
here 
moz//12//14 
the/ 

der Code:

my_dict={} 

def reader(): 
    inputfile= open('<filepath>', 'r') 
    for line in inputfile: 
     my_dict[line.strip()]=0 
    return my_dict 

print(reader()) 

das Ergebnis:

{'the/': 0, 'the': 0, 'moz//12//14': 0, 'here': 0} 

, weil, wenn Sie schreiben:

print("hello\\bonjour\\") 

es gibt:

hello\bonjour\