Dada una ruta como "mydir/myfile.txt"
, ¿cómo encuentro la ruta absoluta del archivo en relación con el directorio de trabajo actual en Python? Por ejemplo, en Windows, podría terminar con:
"C:/example/cwd/mydir/myfile.txt"
Dada una ruta como "mydir/myfile.txt"
, ¿cómo encuentro la ruta absoluta del archivo en relación con el directorio de trabajo actual en Python? Por ejemplo, en Windows, podría terminar con:
"C:/example/cwd/mydir/myfile.txt"
Respuestas:
También funciona si ya es una ruta absoluta:
fuente
normpath()
de la siguiente manera:normpath(join(os.getcwd(), path))
. Entonces, simydir/myfile.txt
no lo hacesos.getcwd()
, la ruta absoluta no es la ruta real .mydir/myfile.txt
refiere implícitamente a una ruta dentro del directorio de trabajo actual, por lo que es equivalente a./mydir/myfile.txt
. Es posible que esa no sea la ruta que desea ingresar, pero parece ser la interpretación correcta de la ruta hasta donde puedo decir. ¿Podrías dar más detalles?abspath
función y un archivo real. Puede proporcionar cualquier nombre de ruta, los archivos inexistentes y las jerarquías de directorio están bien, y abspath simplemente resolverá los bits de la ruta (incluido el..
elemento " " del directorio padre ) y devolverá una cadena. Esto es solo una cadena calculada desde el directorio actual; Parece que cualquier correlación con un archivo real es accidental. Trataros.path.abspath("/wow/junk/../blha/hooey")
. Funciona.os.path.exists
. Por el contrario, los sistemas como PowerShell que insisten en la ruta existente con la función de resolución de ruta estándar son difíciles de usar.relpath
path
relpath
Puede usar la nueva biblioteca Python 3.4
pathlib
. (También puede obtenerlo para Python 2.6 o 2.7 usandopip install pathlib
.) Los autores escribieron : "El objetivo de esta biblioteca es proporcionar una jerarquía simple de clases para manejar las rutas del sistema de archivos y las operaciones comunes que los usuarios realizan sobre ellas".Para obtener una ruta absoluta en Windows:
O en UNIX:
Los documentos están aquí: https://docs.python.org/3/library/pathlib.html
fuente
os.path.abspath()
me dio un error:AttributeError: 'NoneType' object has no attribute 'startswith'
usarPath().resolve()
no tiene la misma ruta de archivo relativa. (Linux y Python3.4)Mejor aún, instale el módulo (que se encuentra en
PyPI
), envuelve todas lasos.path
funciones y otras funciones relacionadas en métodos en un objeto que puede usarse dondequiera que se usen cadenas:fuente
pathlib
. Vea mi respuesta en este hilo.from path import Path
entoncesPath('mydir/myfile.txt').abspath()
path
módulo diferente . El módulo vinculado utiliza una clase llamadapath
.Hoy también puede usar el
unipath
paquete basado enpath.py
: http://sluggo.scrapping.cc/python/unipath/Recomendaría usar este paquete, ya que ofrece una interfaz limpia para las utilidades comunes de os.path .
fuente
Actualización para Python 3.4+
pathlib
que realmente responde la pregunta:Si solo necesita una cadena temporal, tenga en cuenta que puede usar
Path
objetos con todas las funciones relevantesos.path
, incluido, por supuestoabspath
:fuente
Tenga en cuenta que
expanduser
es necesario (en Unix) en caso de que la expresión dada para el nombre y la ubicación del archivo (o directorio) pueda contener un encabezado~/
(la tilde se refiere al directorio de inicio del usuario) yexpandvars
se ocupa de cualquier otra variable de entorno (como$HOME
).fuente
Esto siempre obtiene el nombre de archivo correcto del script actual, incluso cuando se llama desde otro script. Es especialmente útil cuando se usa
subprocess
.a partir de ahí, puede obtener la ruta completa del script con:
También facilita la navegación por las carpetas al agregar
/..
tantas veces como desee 'subir' en la jerarquía de directorios.Para obtener el cwd:
Para la ruta principal:
Al combinarlo
"/.."
con otros nombres de archivo, puede acceder a cualquier archivo en el sistema.fuente
El módulo
os
proporciona una forma de encontrar la ruta de abs.PERO la mayoría de las rutas en Linux comienzan con
~
(tilde), lo que no da un resultado satisfactorio.así que puedes usar
srblib
para eso.instalarlo usando
python3 -m pip install srblib
https://pypi.org/project/srblib/
fuente
Prefiero usar glob
A continuación, le mostramos cómo enumerar todos los tipos de archivos en su carpeta actual:
A continuación, le mostramos cómo enumerar todos los archivos .txt (por ejemplo) en su carpeta actual:
A continuación se explica cómo enumerar todos los tipos de archivos en un directorio elegido:
espero que esto te haya ayudado
fuente
os.path.abspath()
) a cualquier ruta relativa queglob
proporcione para sus primeros dos casos ...si estás en una mac
esto te dará un camino completo:
mostrará la siguiente ruta:
fuente
En caso de que alguien esté usando Python y Linux y esté buscando la ruta completa al archivo:
fuente