Доступ к ресурсу из той же папки - PullRequest
1 голос
/ 11 июля 2020
Приложение

My Python 3.6 имеет следующую структуру:

app/
|__ utility.py
|__ resource.txt
|__ notebooks/
    |__ sandbox.ipynb
      

В utility.py у меня есть функция, которая читает файл ресурсов:

# utility.py
def do_something():
    with open('resource.txt') as f:
        content = f.read()
    

Все хорошо и хорошо.

Проблема в том, что когда я импортирую утилиту в sandbox.ipynb, функция не работает, потому что не может найти файл resource.txt в папке notebooks:

# sandbox.ipynb
import sys
if '..' not in sys.path
    sys.path.append('..')

from utility import do_something # ok
do_something() # resource.txt not found

Каким способом Pythoni c сделать так, чтобы do_something всегда читался из файла resource.txt, который находится в той же папке, что и utility.py? Старший разработчик в моей компании не рекомендовал использовать __file__, потому что он может указывать на неправильное расположение zip-пакета. Это правда?

1 Ответ

1 голос
/ 11 июля 2020

Вы можете получить каталог исполняемого файла следующим образом:

import os

dir_path = os.path.dirname(os.path.realpath(__file__))
resource_filepath = os.path.join(dir_path, 'resource.txt')

def do_something():
    with open(resource_filepath) as f:
        content = f.read()

...