Dividir una cadena por barra invertida en python

Pregunta simple pero estoy luchando con ella durante demasiado tiempo. Básicamente quiero dividir una cadena por \ (barra invertida).

a = "1\2\3\4" 

Intenté escapar de la barra invertida pero no parece funcionar:

  print(a.split('\')) print(a.split('"\"')) print(a.split('\\')) print(a.split('"\\"')) 

Quiero obtener este resultado:

  ['1','2','3','4'] 

Muchas gracias de antemano

Tienes la idea correcta de escapar de las barras invertidas, pero a pesar de su apariencia, la cadena de entrada no tiene realmente barras invertidas. ¡Necesitas escapar de ellos en la entrada, también!

 >>> a = "1\\2\\3\\4" # Note the doubled backslashes here! >>> print(a.split('\\')) # Split on '\\' ['1', '2', '3', '4'] 

También puede usar un literal de cadena sin formato para la entrada, si es probable que tenga muchas barras invertidas. Esta notación es mucho más clara de ver (IMO), pero tiene algunas limitaciones: ¡lea los documentos!

 >>> a = r"1\2\3\4" >>> print(a.split('\\')) ['1', '2', '3', '4'] 

Si está obteniendo a lugar a otro lugar, y a.split('\\') no se divide adecuadamente en las barras invertidas visibles, eso significa que tiene algo más en lugar de barras invertidas reales. Intente print(repr(a)) para ver cómo se ve realmente la cadena “literal”.

 >>> a = '1\2\3\4' >>> print(a) 1☻♥♦ >>> print(repr(a)) '1\x02\x03\x04' >>> b = '1\\2\\3\\4' >>> print(b) 1\2\3\4 >>> print(repr(b)) '1\\2\\3\\4' 

Puede dividir una cadena con una barra invertida usando a.split('\\') .

La razón por la que esto no funciona en su caso es que \x en su asignación a = "1\2\3\4" se interpreta como un número octal. Si prefieres la cadena con r , obtendrás el resultado deseado.

Según esta respuesta:

https://stackoverflow.com/a/2081708/3893465

tendrás que escapar de las barras invertidas antes de dividir como tal:

 >>> a = "1\2\3\4" >>> a.encode('string-escape').split("\\x") ['1', '02', '03', '04']