2016-09-07 7 views
0

Предварительные:доступа по отношению к импортируемому модулю питона

У меня есть Анаконда 3 на Windows 10, и папка, folder_default, что я поставил на пути Python. Я не уверен, правильная терминология, так что ясность: независимо от того, где мой скрипт Python, если у меня есть строка кода, которая говорит import myFile, эта строка кода будет успешной, если myFile.py находится в folder_default.

Мой вопрос:

В folder_default, у меня есть:

  1. подпапку useful_files который содержит текстовый файл с именем useful_file_1.txt.
  2. Питон-скрипт под названием my_misc.py.

my_misc.py имеет строку, похожую на: np.loadtxt('useful_files/useful_file_1.txt'). Эта строка не работает, если я использую import my_script в файле python в другом месте, отличном от folder_default, так как useful_files/useful_file_1.txt не путь к папке относительно файла python, который импортирует my_misc.py. Я не хочу начинать использовать глобальные пути к файлу, если я могу избежать этого.

Как я могу получить доступ к файлам с использованием путей к файлам относительно импортированного модуля python, а не относиться к скрипту python, который импортирует этот модуль?

Пожалуйста, дайте мне знать, если вопрос неясен. Я попытался написать фальшивую минимальную версию установки, которая на самом деле находится на моем компьютере, в надежде, что это упростит ситуацию, но я могу ее изменить, если это действительно делает вещи более запутанным.

Спасибо.

ответ

0

Вы можете получить путь к текущему модулю с использованием метода getfile модуля inspect как inspect.getfile(inspect.currentframe()). Например:

# File : my_misc.py 
import os, inspect 

module_dir_path = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) # get path to the directory of current module 
useful_file_path = os.path.join(module_dir_path,'useful_files','useful_file_1.txt') 
# path stored in useful_file_path. do whatever you want! 

np.loadtxt(useful_file_path)