¿Cómo crear una cadena cruda a partir de una variable de cadena en Python?

De esta manera, creas una cadena cruda a partir de una cadena:

test_file=open(r'c:\Python27\test.txt','r') 

¿Cómo se crea una variable sin formato a partir de una variable de cadena, como

 path = 'c:\Python27\test.txt' test_file=open(rpath,'r') 

Porque tengo una ruta de archivo:

 file_path = "C:\Users\b_zz\Desktop\my_file" 

Cuando lo hago:

 data_list = open(os.path.expandvars(file_path),"r").readlines() 

Yo obtengo:

     Traceback (most recent call last): File "", line 1, in  scheduled_data_list = open(os.path.expandvars(file_path),"r").readlines() IOError: [Errno 22] invalid mode ('r') or filename: 'C:\\Users\x08_zz\\Desktop\\my_file' 

    No existe tal cosa como “cadena sin formato” una vez que la cadena se crea en el proceso. Las formas r"" de especificar la cadena solo existen en el propio código fuente.

    Eso significa que "\x01" creará una cadena que consta de un byte 0x01 , pero r"\x01" creará una cadena que consta de 4 bytes '0x5c', '0x78', '0x30', '0x31' . (Suponiendo que estemos hablando de python 2 e ignorando las codificaciones por un tiempo).

    Usted mencionó en el comentario que está tomando la cadena del usuario (ya sea la entrada de la interfaz gráfica de usuario o la consola funcionará de la misma manera): en ese caso, los escapes de caracteres de la cadena no se procesarán, por lo que no hay nada que hacer al respecto. Puede verificarlo fácilmente así (o lo que sea el equivalente de Windows, solo hablo * nix):

     % cat > test < \x41 heredoc> EOF % < test python -c "import sys; print sys.stdin.read()" \x41 

    Mi solución para convertir una cadena en una cadena en bruto (solo funciona con estas secuencias: ‘\ a’, \ b ‘,’ \ f ‘,’ \ n ‘,’ \ r ‘,’ \ t ‘,’ \ v ‘. Lista De todas las secuencias de escape está aquí ):

     def str_to_raw(s): raw_map = {8:r'\b', 7:r'\a', 12:r'\f', 10:r'\n', 13:r'\r', 9:r'\t', 11:r'\v'} return r''.join(i if ord(i) > 32 else raw_map.get(ord(i), i) for i in s) 

    Manifestación:

     >>> file_path = "C:\Users\b_zz\Desktop\fy_file" >>> file_path 'C:\\Users\x08_zz\\Desktop\x0cy_file' >>> str_to_raw(file_path) 'C:\\Users\\b_zz\\Desktop\\fy_file' 

    La solución de ndpu funciona para mí.

    No pude resistir la tentación de mejorarlo (hacerlo compatible con las versiones antiguas de Python 2 y con la esperanza de acelerarlo):

     _dRawMap = {8:r'\b', 7:r'\a', 12:r'\f', 10:r'\n', 13:r'\r', 9:r'\t', 11:r'\v'} def getRawGotStr(s): # return r''.join( [ _dRawMap.get( ord(c), c ) for c in s ] ) 

    Hice una cuidadosa contrarreloj, y resulta que el código original de ndpu es un poco más rápido. Las comprensiones de listas son rápidas, pero las expresiones generadoras son más rápidas.