Структура каталогов:
├--- mod
| ├--- __init__.py
| └--- abc.data
└--- test.py
__ init__.py:
with open("abc.data", 'r') as f:
pass # read and process the data
test.py:
import mod
Ожидается, что вышеприведенная программа прочитает данные в файле abc.data
, но вместо этого выдает ошибку:
FileNotFoundError: [Errno 2] No such file or directory: 'abc.data'
И это потому, что текущий каталог интерпретатора Python является родительским каталогом test.py
.
Так как читать abc.data
в модуле mod
независимо от местоположения test.py
?
На самом деле работает следующий код:
__ init__.py:
import os
filepath = os.path.join(os.path.dirname(os.path.realpath(__file__)), "abc.data")
with open(filepath, 'r') as f:
pass # read and process the data
Но это решение несколько грязное, особенно когда в __init__.py
нужно прочитать много файлов. Есть ли более элегантное решение?