python - non - ¿Hacer una ruta de archivo "siempre relativa al módulo actual"?
python relative import (2)
La solución es usar __file__
y está bastante limpio:
import os
TEST_FILENAME = os.path.join(os.path.dirname(__file__), ''test.txt'')
Digamos que tienes un módulo que contiene
myfile = open(''test.txt'', ''r'')
Y el archivo ''test.txt'' está en la misma carpeta. Si vas a ejecutar el módulo, el archivo se abrirá con éxito. Ahora digamos que importa ese módulo de otro que está en otra carpeta. El archivo no se buscará en la misma carpeta que el módulo donde se encuentra ese código. Entonces, ¿cómo hacer que el módulo busque archivos con rutas relativas en la misma carpeta primero? Existen varias soluciones al usar " __file__
" u " os.getcwd()
", pero espero que haya una forma más limpia, como el mismo carácter especial en la cadena que pasas a abrir () o file ().
Para los módulos normales cargados desde archivos .py
, el __file__
debe estar presente y ser utilizable. Para unir la información de __file__
a su ruta relativa, hay una opción más nueva que las interfaces os.path
disponibles desde 2014:
from pathlib import Path
here = Path(__file__).parent
with open(here/''test.txt'') as myfile:
...
pathlib
se agregó a Python en 3.4 - vea PEP428 . Para los usuarios que todavía están en Python 2.7 que desean usar las mismas API, hay un puerto trasero disponible .
Los usuarios interesados en aplicar los enfoques más modernos disponibles deben considerar pasar a importlib-resources lugar de unir archivos de datos en relación con el árbol de origen. Actualmente, pocos usuarios tienen el lujo de restringir la compatibilidad con Python 3.7+ solo, así que menciono esto como un aviso a los que les gusta estar a la vanguardia.