top non from beyond attempted another python module path relative

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.