Разделительные линии Python 3.5 для многострочной строки, содержащей обратную косую черту

Как я могу эффективно разделить многострочную строку, содержащую обратную косую черту, что приводит к нежелательным escape-символам в отдельные строки?

Вот пример ввода, с которым я имею дело:

strInput = '''signalArr(0)="ASCB D\axx\bxx\fxx\nxx" signalArr(1)="root\rxx\txx\vxx"''' 

Я пробовал это (чтобы преобразовать одиночную обратную косую черту в двойную. Таким образом, побег с обратным слэшем имел бы приоритет, и следующий символ обрабатывался бы «нормально»):

 def doubleBackslash(inputString): inputString.replace('\\','\\\\') inputString.replace('\a','\\a') inputString.replace('\b','\\b') inputString.replace('\f','\\f') inputString.replace('\n','\\n') inputString.replace('\r','\\r') inputString.replace('\t','\\t') inputString.replace('\v','\\v') return inputString strInputProcessed = doubleBackslash(strInput) 

Я хотел бы получить:

 lineList = strInputProcessed.splitlines() >> ['signalArr(0)="ASCB D\axx\bxx\fxx\nxx"','signalArr(1)="root\rxx\txx\vxx"'] 

Что я имею:

 >> ['signalArr(0)="ASCB D\x07xx\x08xx', 'xx', 'xx"', 'signalArr(1)="root', 'xx\txx', 'xx"'] 

Попытайтесь сохранить свой ввод как необработанную строку, тогда все символы «\ n» будут автоматически экранированы:

 >>> var = r'''abc\n ... cba''' >>> print var abc\n cba >>> var.splitlines() ['abc\\n', 'bca'] 

(Обратите внимание на r перед символом '. Это означает, что строка является исходной)

В качестве дополнительного, если вы хотите избежать существующей строки, вместо команд замены, которые вы делали выше, вы можете использовать encode с 'string-escape'.

 >>> s = 'abc\nabc\nabc' >>> s.encode('string-escape') 'abc\\nabc\\nabc' 

и аналогично, если необходимо, вы можете отменить строку-экранирование строки.

 >>> s.decode('string-escape') 

Наконец, я подумал, что добавлю в ваш контекст:

 >>> strInput = r'''signalArr(0)="ASCB D\axx\bxx\fxx\nxx" ... signalArr(1)="root\rxx\txx\vxx"''' >>> strInput.splitlines() ['signalArr(0)="ASCB D\\axx\\bxx\\fxx\\nxx"', 'signalArr(1)="root\\rxx\\txx\\vxx"'] 

Несмотря на то, что дополнительные \ присутствуют на печатной строке, они действительно не существуют в памяти. Итерация строки докажет это, поскольку она не дает вам лишний символ, который используется для выхода.

 >>> s = r'\a\b\c' >>> >>> for c in s: ... print c \ a \ b \ c >>> list(s) ['\\', 'a', '\\', 'b', '\\', 'c']