Saltar al contenido

Ruta de Windows en Python

noviembre 4, 2021
apple touch icon@2

Sí, en Python, los literales de cadena denota el inicio de una secuencia de escape. En su camino tiene una secuencia de escape válida de dos caracteres a, que se contrae en uno personaje que es Campana ASCII:

>>> 'a'
'x07'
>>> len('a')
1
>>> 'C:meshesas'
'C:\meshesx07s'
>>> print('C:meshesas')
C:meshess

Otras secuencias de escape comunes incluyen t (pestaña), n (linea de alimentación), r (retorno de carro):

>>> list('C:test')
['C', ':', 't', 'e', 's', 't']
>>> list('C:nest')
['C', ':', 'n', 'e', 's', 't']
>>> list('C:rest')
['C', ':', 'r', 'e', 's', 't']

Como puede ver, en todos estos ejemplos, la barra invertida y el siguiente carácter del literal se agruparon para formar un solo carácter en la cadena final. La lista completa de secuencias de escape de Python es aquí.

Hay una variedad de formas de lidiar con eso:

  1. Python no procesará secuencias de escape en cadenas literales con el prefijo r o R:

    >>> r'C:meshesas'
    'C:\meshes\as'
    >>> print(r'C:meshesas')
    C:meshesas
    
  2. Python en Windows también debería manejar barras diagonales.

  3. Podrías usar os.path.join

    >>> import os
    >>> os.path.join('C:', os.sep, 'meshes', 'as')
    'C:\meshes\as'
    
  4. … o el más nuevo pathlib módulo

    >>> from pathlib import Path
    >>> Path('C:', "http://stackoverflow.com/", 'meshes', 'as')
    WindowsPath('C:/meshes/as')
    
close