Pregunta

Dado un camino como "mydir/myfile.txt", ¿cómo encuentro la ruta absoluta del archivo en relación con el directorio de trabajo actual en Python?P.ej.en Windows, podría terminar con:

"C:/example/cwd/mydir/myfile.txt"
¿Fue útil?

Solución

>>> import os
>>> os.path.abspath("mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'

También funciona si ya es una ruta absoluta:

>>> import os
>>> os.path.abspath("C:/example/cwd/mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'

Otros consejos

Podrías usar la nueva biblioteca Python 3.4. pathlib.(También puedes obtenerlo para Python 2.6 o 2.7 usando pip install pathlib.) Los autores escribió:"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:

>>> from pathlib import Path
>>> p = Path("pythonw.exe").resolve()
>>> p
WindowsPath('C:/Python27/pythonw.exe')
>>> str(p)
'C:\\Python27\\pythonw.exe'

O en UNIX:

>>> from pathlib import Path
>>> p = Path("python3.4").resolve()
>>> p
PosixPath('/opt/python3/bin/python3.4')
>>> str(p)
'/opt/python3/bin/python3.4'

Los documentos están aquí: https://docs.python.org/3/library/pathlib.html

>>> import os
>>> os.path.abspath('mydir/myfile.txt')
'C:\\example\\cwd\\mydir\\myfile.txt'
>>> 

Mejor aún, instale el módulo (que se encuentra en PyPI), envuelve todos los os.path funciones y otras funciones relacionadas en métodos en un objeto que se pueden usar dondequiera que se usen cadenas:

>>> from path import path
>>> path('mydir/myfile.txt').abspath()
'C:\\example\\cwd\\mydir\\myfile.txt'
>>>

Hoy también puedes utilizar el unipath paquete que se basó en path.py: http://sluggo.scrapping.cc/python/unipath/

>>> from unipath import Path
>>> absolute_path = Path('mydir/myfile.txt').absolute()
Path('C:\\example\\cwd\\mydir\\myfile.txt')
>>> str(absolute_path)
C:\\example\\cwd\\mydir\\myfile.txt
>>>

Recomendaría usar este paquete ya que ofrece una interfaz limpia para las utilidades comunes de os.path.

Actualización para Python 3.4+ pathlib eso realmente responde a la pregunta:

from pathlib import Path

relative = Path("mydir/myfile.txt")
absolute = relative.absolute()  # absolute is a Path object

Si solo necesita una cadena temporal, tenga en cuenta que puede usar Path objetos con todas las funciones relevantes en os.path, incluyendo por supuesto abspath:

from os.path import abspath

absolute = abspath(relative)  # absolute is a str object
import os
os.path.abspath(os.path.expanduser(os.path.expandvars(PathNameString)))

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 inicio ~/(la tilde se refiere al directorio de inicio del usuario), y expandvars se encarga de cualquier otra variable de entorno (como $HOME).

prefiero usar glob

A continuación se explica cómo enumerar todos los tipos de archivos en su carpeta actual:

import glob
for x in glob.glob():
    print(x)

A continuación se explica cómo enumerar todos (por ejemplo) los archivos .txt en su carpeta actual:

import glob
for x in glob.glob('*.txt'):
    print(x)

A continuación se explica cómo enumerar todos los tipos de archivos en un directorio elegido:

import glob
for x in glob.glob('C:/example/hi/hello/'):
    print(x)

Espero que esto te haya ayudado

Módulo os proporciona una manera de encontrar la ruta de los abdominales.

PERO la mayoría de las rutas en Linux comienzan con ~ (tilde), que no da un resultado satisfactorio.

para que puedas usar srblib para eso.

>>> import os
>>> os.path.abspath('~/hello/world')
'/home/srb/Desktop/~/hello/world'
>>> from srblib import abs_path
>>> abs_path('~/hello/world')
'/home/srb/hello/world'

instalarlo usando python3 -m pip install srblib

https://pypi.org/project/srblib/

si estás en una mac

import os
upload_folder = os.path.abspath("static/img/users")

esto le dará una ruta completa:

print(upload_folder)

mostrará la siguiente ruta:

>>>/Users/myUsername/PycharmProjects/OBS/static/img/user

En caso de que alguien esté usando Python y Linux y busque la ruta completa al archivo:

>>> path=os.popen("readlink -f file").read()
>>> print path
abs/path/to/file

Este siempre obtiene el nombre de archivo correcto del script actual, incluso cuando se llama desde otro script.Es especialmente útil cuando se utiliza subprocess.

import sys,os

filename = sys.argv[0]

desde allí, puedes obtener la ruta completa del script con:

>>> os.path.abspath(filename)
'/foo/bar/script.py'

También facilita la navegación por las carpetas simplemente agregando /.. tantas veces como quieras subir en la jerarquía de directorios.

Para obtener el cwd:

>>> os.path.abspath(filename+"/..")
'/foo/bar'

Para la ruta principal:

>>> os.path.abspath(filename+"/../..")
'/foo'

Combinando "/.." con otros nombres de archivo, puede acceder a cualquier archivo del sistema.

filePath = os.path.abspath(directoryName)
filePathWithSlash = filePath + "\\"
filenameWithPath = os.path.join(filePathWithSlash, filename)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top