¿Cómo agrego una cadena a una ruta en Python?

2 minutos de lectura

Avatar de usuario de Ray Salemi
ray salemi

El siguiente código:

from pathlib import Path
Desktop = Path('Desktop')
SubDeskTop = Desktop + "/subdir"

obtiene el siguiente error:

    ---------------------------------------------------------------------------
 TypeError                                 Traceback (most recent call last)
    <ipython-input-4-eb31bbeb869b> in <module>()
             1 from pathlib import Path
             2 Desktop = Path('Desktop')
       ----> 3 SubDeskTop = Desktop+"/subdir"

     TypeError: unsupported operand type(s) for +: 'PosixPath' and 'str'

Claramente estoy haciendo algo turbio aquí, pero plantea la pregunta: ¿Cómo accedo a un subdirectorio de un Path ¿objeto?

  • Todas las respuestas actuales entienden que el OP realmente quería unirse otro camino pero que pasa si tu De Verdad quería añadir una cadena arbitraria (por ejemplo, .tmp)?

    – Jonathan Reinhart

    11 de abril a las 2:03

  • ¿Qué tal esto? ‘Ruta(str(ruta_orig)+”.tmp”)’

    – Ray Salemi

    12 abr a las 12:36


  • Path(str(orig_path)+".tmp")

    – Ray Salemi

    12 abr a las 13:03


Avatar de usuario de Ray Salemi
ray salemi

  • Lo correcto operador extender un pathlib el objeto es /
from pathlib import Path

Desktop = Path('Desktop')

# print(Desktop)
WindowsPath('Desktop')

# extend the path to include subdir
SubDeskTop = Desktop / "subdir"

# print(SubDeskTop)
WindowsPath('Desktop/subdir')

# passing an absolute path has different behavior
SubDeskTop = Path('Desktop') / '/subdir'

# print(SubDeskTop)
WindowsPath('/subdir')
  • Cuando se dan varios caminos absolutos, el último se toma como ancla (imitando os.path.join()comportamiento de ):
>>> PurePath('/etc', '/usr', 'lib64')
PurePosixPath('/usr/lib64')

>>> PureWindowsPath('c:/Windows', 'd:bar')
PureWindowsPath('d:bar')
  • En una ruta de Windows, cambiar la raíz local no descarta la configuración de la unidad anterior:
>>> PureWindowsPath('c:/Windows', '/Program Files')
PureWindowsPath('c:/Program Files')
  • Consulte la documentación para obtener detalles adicionales relacionados con dar una ruta absoluta, como Path('/subdir').

Recursos:

Lo que estás buscando es:

from pathlib import Path
Desktop = Path('Desktop')
SubDeskTop = Path.joinpath(Desktop, "subdir")

la joinpath() la función agregará el segundo parámetro al primero y agregará “https://stackoverflow.com/” por usted.

  • Eso funciona, aunque aprendí que el operador ‘/’ está sobrecargado para hacer lo mismo.

    – Ray Salemi

    10 de enero de 2018 a las 15:48

  • Buen punto. Principalmente uso el path módulo en os por lo que el uso es un poco diferente. Path crea un objeto de ruta pero en os.path el objeto devuelto es una cadena, por lo que no podría llamar a esa función en sí mismo. Es bueno saberlo, TIL.

    – r.ook

    10 de enero de 2018 a las 16:27


  • TENER CUIDADO: SubDeskTop = Path.joinpath(Desktop, "/subdir") no funcionará La barra antes subdir lo arruina

    – patrickt

    15 de junio de 2020 a las 10:41

¿Ha sido útil esta solución?