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.txtno lo hacesos.getcwd(), la ruta absoluta no es la ruta real .mydir/myfile.txtrefiere 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?abspathfunció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.relpathpathrelpathPuede 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.pathfunciones 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 PathentoncesPath('mydir/myfile.txt').abspath()pathmódulo diferente . El módulo vinculado utiliza una clase llamadapath.Hoy también puede usar el
unipathpaquete 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+
pathlibque realmente responde la pregunta:Si solo necesita una cadena temporal, tenga en cuenta que puede usar
Pathobjetos con todas las funciones relevantesos.path, incluido, por supuestoabspath:fuente
Tenga en cuenta que
expanduseres 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) yexpandvarsse 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
osproporciona 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
srblibpara eso.instalarlo usando
python3 -m pip install srblibhttps://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 queglobproporcione 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