python - tutorial - the django project
Obtener padre del directorio actual de la secuencia de comandos de Python (5)
Usando os.path
Para obtener el directorio principal del directorio que contiene la secuencia de comandos (independientemente del directorio de trabajo actual), deberá utilizar __file__
.
Dentro del script, use os.path.abspath(__file__)
para obtener la ruta absoluta del script, y llame a os.path.dirname
dos veces:
from os.path import dirname, abspath
d = dirname(dirname(abspath(__file__))) # /home/kristina/desire-directory
Básicamente, puede subir el árbol del directorio llamando a os.path.dirname
tantas veces como sea necesario. Ejemplo:
In [4]: from os.path import dirname
In [5]: dirname(''/home/kristina/desire-directory/scripts/script.py'')
Out[5]: ''/home/kristina/desire-directory/scripts''
In [6]: dirname(dirname(''/home/kristina/desire-directory/scripts/script.py''))
Out[6]: ''/home/kristina/desire-directory''
Si desea obtener el directorio principal del directorio de trabajo actual , use os.getcwd
:
import os
d = os.path.dirname(os.getcwd())
Usando pathlib
También puede usar el módulo pathlib
(disponible en Python 3.4 o más reciente).
Cada instancia de pathlib.Path
tiene el atributo parent
refiere al directorio principal, así como el atributo principal, que es una lista de ancestros de la ruta. Path.resolve
se puede utilizar para obtener la ruta absoluta. También resuelve todos los enlaces simbólicos, pero puede usar Path.absolute
en su lugar si no es un comportamiento deseado.
Path(__file__)
y la Path()
representan la ruta del script y el directorio de trabajo actual respectivamente, por lo tanto, para obtener el directorio principal del directorio del script (independientemente del directorio de trabajo actual) que usaría
from pathlib import Path
# `path.parents[1]` is the same as `path.parent.parent`
d = Path(__file__).resolve().parents[1] # Path(''/home/kristina/desire-directory'')
y para obtener el directorio padre del directorio de trabajo actual
from pathlib import Path
d = Path().resolve().parent
Tenga en cuenta que d
es una instancia de Path
, que no siempre es útil. Puedes convertirlo a str
fácilmente cuando lo necesites:
In [15]: str(d)
Out[15]: ''/home/kristina/desire-directory''
Quiero obtener el padre del directorio actual de la secuencia de comandos de Python. Por ejemplo, lanzo el script desde /home/kristina/desire-directory/scripts
la ruta del deseo en este caso es /home/kristina/desire-directory
Sé sys.path[0]
de sys
. Pero no quiero analizar la cadena resultante sys.path[0]
. ¿Hay alguna otra manera de obtener el padre del directorio actual en Python?
Esto me funcionó (estoy en Ubuntu):
import os
os.path.dirname(os.getcwd())
Puedes usar Path.parent
desde el módulo pathlib
:
from pathlib import Path
# ...
Path(__file__).parent
Puede utilizar varias llamadas para el parent
para ir más lejos en la ruta:
Path(__file__).parent.parent
from os.path import dirname
from os.path import abspath
def get_file_parent_dir_path():
"""return the path of the parent directory of current file''s directory """
current_dir_path = dirname(abspath(__file__))
path_sep = os.path.sep
components = current_dir_path.split(path_sep)
return path_sep.join(components[:-1])
import os
current_file = os.path.abspath(os.path.dirname(__file__))
parent_of_parent_dir = os.path.join(current_file, ''../../'')