2017-08-21 7 views
1

Ich habe keinen Zugriff auf den Code, wie es vom Benutzer eingegeben wird. das '\' am Ende von \ ok \ gib mir das falsche Ergebnis. Wie kann ich() korrekt teilen?'' am Ende der Zeile oder Zeile geben split() Fehler

+0

'\ n' wird für Newline verwendet, aber wenn '\' nach OK gefunden wird, wird es maskiert und Newline wird verpasst – 0decimal0

+0

Meinen Sie, der Benutzer ändert Ihr aktuelles Skript, um Eingaben zu geben? –

+0

Verwenden Sie "os.linesep" anstelle von "\ n" – 0decimal0

Antwort

1

Das Problem ist, wie in den Kommentaren erwähnt, dass \\ in ein Zeichenfolgenliteral durch eine neue Zeile folgt, dass Newline zu entkommen, wird der Wert von code so in der Tat bereits

[--] 
{start} 
\ok"waw" 
the-end 

ist Sie verweisen können this für einige weitere Informationen über String-Literale in Python.

ohne Newline zwischen ok und "waw". Das Problem liegt eigentlich gar nicht bei Ihrem Code, sondern bei Ihrer Beispieleingabe. Sie sagen, Sie haben keinen Zugriff auf den "Code", da der Benutzer sie ändern wird - ich kann nur annehmen, dass Sie nicht meinen, dass der Benutzer das Programm ändert, um Eingaben zu geben. Mein Vorschlag für die Eingabe ist, dass der Benutzer eine separate Datei bereitstellt. Auf diese Weise wird die Zeichenfolge als Zeichenstrom interpretiert und das allein, und Python versucht nicht, zu entkommen. Der Einfachheit halber habe ich den Dateinamen fest codiert, aber es wäre wahrscheinlich auch eine gute Idee, dies flexibel zu machen (nehmen Sie die Eingabe von stdin, lassen Sie den Benutzer den Dateinamen, etc ..).

Die Datei input.txt enthält:

[--] 
{start} 
\ok\ 
"waw" 
the-end 

Der Code:

import sys 
with open("input.txt", "r") as in_file: 
    for line in in_file: 
     sys.stdout.write(line) 

Wie erwartet, wird der Code ouputs

[--] 
{start} 
\ok\ 
"waw" 
the-end 

Vermutlich einige mehr mit den Linien tun wollen, da dies nur die Eingabe repliziert.

Verwandte Themen