in

python: busca el directorio actual y el directorio del archivo

apple touch icon@2

los pathlib módulo, introducido en Python 3.4 (PEP 428 – El módulo pathlib – rutas del sistema de archivos orientadas a objetos), hace que la experiencia relacionada con la ruta sea mucho mejor.

pwd

/home/skovorodkin/stack

tree

.
└── scripts
    ├── 1.py
    └── 2.py

Para obtener el directorio de trabajo actual, use Path.cwd():

from pathlib import Path

print(Path.cwd())  # /home/skovorodkin/stack

Para obtener una ruta absoluta a su archivo de secuencia de comandos, utilice el Path.resolve() método:

print(Path(__file__).resolve())  # /home/skovorodkin/stack/scripts/1.py

Y para obtener la ruta de un directorio donde se encuentra su script, acceda .parent (se recomienda llamar .resolve() antes de .parent):

print(Path(__file__).resolve().parent)  # /home/skovorodkin/stack/scripts

Recuérdalo __file__ no es confiable en algunas situaciones: ¿Cómo obtengo la ruta del archivo ejecutado actual en Python?.


Tenga en cuenta que Path.cwd(), Path.resolve() y otra Path los métodos devuelven objetos de ruta (PosixPath en mi caso), no cadenas. En Python 3.4 y 3.5 eso causó algo de dolor, porque open La función incorporada solo podía funcionar con objetos de cadena o bytes, y no admitía Path objetos, por lo que tuvo que convertir Path objetos a cadenas o utilizar el Path.open() método, pero la última opción requería que cambiaras el código antiguo:

Expediente scripts / 2.py

from pathlib import Path

p = Path(__file__).resolve()

with p.open() as f: pass
with open(str(p)) as f: pass
with open(p) as f: pass

print('OK')

Producción

python3.5 scripts/2.py

Traceback (most recent call last):
  File "scripts/2.py", line 11, in <module>
    with open(p) as f:
TypeError: invalid file: PosixPath('/home/skovorodkin/stack/scripts/2.py')

Como se puede ver, open(p) no funciona con Python 3.5.

PEP 519: agregar un protocolo de ruta del sistema de archivos, implementado en Python 3.6, agrega soporte de PathLike objetos a la open función, así que ahora puedes pasar Path objetos a la open funcionar directamente:

python3.6 scripts/2.py

OK

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

C – Reglas de alcance

gfg 200x200 min

Funciones recursivas – GeeksforGeeks