Separadores de camino extraño en Windows

Yo estoy ejecutando este código:

#!/usr/bin/python coding=utf8 # test.py = to demo fault def loadFile(path): f = open(path,'r') text = f.read() return text if __name__ == '__main__': path = 'D:\work\Kindle\srcs\test1.html' document = loadFile(path) print len(document) 

Me da un trackback

 D:\work\Kindle\Tests>python.exe test.py Traceback (most recent call last): File "test.py", line 11, in  document = loadFile(path) File "test.py", line 5, in loadFile f = open(path,'r') IOError: [Errno 22] invalid mode ('r') or filename: 'D:\\work\\Kindle\\srcs\test1.html' D:\work\Kindle\Tests> 

Si cambio la linea de ruta a

 path = 'D:\work\Kindle\srcs\\test1.html' 

(note el doble \\) todo funciona bien.

¿Por qué? ¿O el separador es ‘\’ o no lo es, no es una mezcla?

Sistema. Windows 7, 64 bits, Python 2.7 (r27: 82525, 4 de julio de 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] en win32

Marcado – y todas las barras invertidas aparecen correctamente.

Related of "Separadores de camino extraño en Windows"

La barra invertida es un carácter de escape cuando la siguiente combinación de caracteres resultaría en un significado especial. Tomemos los siguientes ejemplos:

 >>> '\r' '\r' >>> '\n' '\n' >>> '\b' '\x08' >>> '\c' '\\c' >>> 

r, n y b tienen significados especiales cuando están precedidos por una barra invertida. Lo mismo es cierto para t, que produciría una pestaña. O bien necesita A. Doblar todas las barras diagonales inversas, para r'c:\path\to\my\file.txt' coherencia, ya que '\\' producirá una barra diagonal inversa o, B, usará cadenas sin r'c:\path\to\my\file.txt' . La r anterior indicará al intérprete que no evalúe las barras diagonales inversas como secuencias de escape, lo que evitará que \t aparezca como una pestaña.

'\\test1.html' escapar de las barras diagonales inversas en las rutas con una barra diagonal inversa adicional … como ha hecho para '\\test1.html' .

'\t' es la secuencia de escape para un carácter de tabulación.

'D:\work\Kindle\srcs\test1.html es esencialmente 'D:\work\Kindle\srcs est1.html' .

También puede usar literales en bruto, r'\test1.html' expande a:

 '\\test1.html' 

Utilice cadenas en bruto para las rutas de Windows:

 path = r'D:\work\Kindle\srcs\test1.html' 

De lo contrario, la parte \t de su cadena se interpretará como un carácter de tabulación.

La barra invertida es un carácter de escape en Python. Por lo tanto, su ruta de archivo real será D:\work\Kindle\srcsest1.html . Use os.sep, escape las barras invertidas con \\ o use una cadena en bruto al tener el r'some text' .

Además de usar una cadena en bruto (cadena de prefijo con el carácter r), el módulo os.path puede ser útil para proporcionar automáticamente barras diagonales correctas para el sistema operativo al crear una ruta de acceso.

Gotcha – barras diagonales inversas en los nombres de archivo de Windows proporciona una visión general interesante.