Un directorio principal es un directorio sobre otro archivo/directorio en un sistema de archivos jerárquico . Obtener el directorio principal es esencial para realizar ciertas tareas relacionadas con la administración del sistema de archivos. En este artículo, veremos los métodos utilizados para obtener el directorio principal de la secuencia de comandos de Python que se está ejecutando actualmente, y aprenderemos sobre los diversos usos y desventajas de cada uno. Para realizar la tarea antes mencionada, estaríamos usando dos bibliotecas llamadas os e inspect , las cuales están integradas y, por lo tanto, no requieren ninguna instalación.
Para fines de demostración, usaríamos el siguiente archivo, que se encuentra en C:\suga\Lpath.py . El contenido del archivo (código) se cambiará de acuerdo con el contexto en el que se hace referencia.
Estaríamos utilizando la función dirname() que se encuentra dentro del módulo os.path ampliamente en los siguientes ejemplos. Y por lo tanto, sería mejor si nos familiarizamos con esto de antemano.
Sintaxis: os.path.dirname(ruta)
Parámetro:
ruta: un objeto similar a una ruta que representa una ruta del sistema de archivos.
Tipo de devolución:
Este método devuelve una string que representa la ruta absoluta al directorio principal para la ruta especificada
Métodos 1#: Usando el objeto del módulo __file__.
En este método, estaríamos usando __file__ (palabra clave de archivo rodeada de guiones bajos dobles ( dunder )). Este atributo predefinido está presente en la mayoría de los archivos de Python. Este atributo se utiliza para obtener el nombre de archivo del archivo python que se está ejecutando actualmente. Estaríamos pasando la ruta obtenida por __file__, a la función os.path.dirname() para obtener el directorio principal del archivo python.
Python3
import os # Displaying the script path print(__file__) # Displaying the parent directory of the script print(os.path.dirname(__file__))
PRODUCCIÓN:
C:\suga\Lpath.py C:\suga
Inconvenientes:
- El método anterior solo funcionaría si se usa dentro de un script de python. Por lo tanto, si se ejecuta desde un entorno interactivo (stdin) o un intérprete línea por línea (depuración), no funcionaría.
- __file__ no estaría presente en módulos C enlazados estáticamente (bibliotecas escritas originalmente en C pero transferidas a python)
- __file__ no se definiría en un módulo incorporado
Métodos 2#: Uso del argumento de la línea de comandos sys.argv[0]
sys.argv es una lista que contiene los argumentos de la línea de comandos pasados al programa python. En este método, usaríamos el argumento 0 de la lista sys.argv, que es la ruta al archivo python que se está ejecutando actualmente, para obtener el directorio principal del script python.
Python3
import sys print(os.path.dirname(sys.argv[0]))
PRODUCCIÓN:
C:\suga
Inconvenientes:
- El método anterior solo funcionaría si se usa sys.argv[0] dentro de un script de python. No funcionará para raw stdin, ej. ejecutando el comando desde el intérprete de línea de comandos de python (IDLE).
- El método anterior se basa en argumentos, por lo tanto, si el script de python se ejecuta de una manera particular de modo que el primer argumento (en el índice 0) no sea el nombre de archivo del ejecutable, el método no funcionará. Ex. si el archivo Lpath.py se ejecuta con el comando ‘ py Lpath.py ‘, no se mostrará ningún resultado.
Métodos 3#: Uso de la función getsourcefile()
En este método estaríamos usando el método getsourcefile() que se encuentra dentro de la biblioteca de inspección, para obtener la ruta absoluta del script de python que se está ejecutando actualmente. Luego lo pasaríamos a la función os.path.dirname() para obtener el directorio principal del nombre de archivo. Este método es generalmente el más óptimo y compatible de los métodos mencionados anteriormente, ya que es multiplataforma, de pequeña escala (menos líneas de código) y funciona en entornos de ejecución variable.
Sintaxis: getsourcefile(objeto)
Parámetros:
objeto: un objeto referenciable dentro del script de python
Tipo de devolución:
Devuelve la ruta completa al archivo en el que se encontró el objeto. Devuelve Ninguno si el objeto no se pudo identificar dentro de la fuente.
Python3
from inspect import getsourcefile import os print(os.path.dirname(getsourcefile(lambda:0)))
PRODUCCIÓN:
C:\suga
Explicación:
En primer lugar, importamos la función getsourcefile() que se encuentra dentro de la biblioteca de inspección. Después de lo cual, importamos la biblioteca os para usar la función os.path.dirname() que se encuentra dentro, que se usaría para extraer el directorio principal del nombre de archivo del script. Proporcionamos lambda:0 como argumento para la función getsourcefile() , ya que requería un objeto de referencia dentro de la secuencia de comandos de python, por lo tanto, creamos una función ficticia usando lambda, solo para permitir que se haga referencia a ella dentro de la secuencia de comandos de python.
NOTA: Es posible que el código anterior deba modificarse un poco (usando una función personalizada, en lugar de dirname() ) si se va a ejecutar dentro de intérpretes línea por línea (por ejemplo, IDLE). Pero eso está fuera del alcance de este artículo.