Данные доступа Python в подкаталоге пакета

ll = [x for _,x in sum(ll,())]
115
задан todddeluca 18 January 2013 в 16:57
поделиться

3 ответа

Вы можете использовать __ file __ , чтобы получить путь к пакету, например:

import os
this_dir, this_filename = os.path.split(__file__)
DATA_PATH = os.path.join(this_dir, "data", "data.txt")
print open(DATA_PATH).read()
24
ответ дан 24 November 2019 в 02:26
поделиться

Я думаю, что нашел ответ.

Я делаю модуль data_path.py, который я импортирую в другие мои модули, содержащие:

data_path = os.path.join(os.path.dirname(__file__),'data')

И затем я открываю все свои файлы с помощью

open(os.path.join(data_path,'filename'), <param>)
6
ответ дан 24 November 2019 в 02:26
поделиться

Часто существует не, указывают в создании ответа, который подробно излагает код, который делает не работа, как, но я полагаю, что это исключение. Python 3.7 добавил importlib.resources , который, как предполагается, заменяет pkg_resources. Это работало бы на доступ к файлам в пакетах, которые не имеют наклонные черты на их имена, т.е.

foo/
    __init__.py
    module1.py
    module2.py
    data/   
       data.txt
    data2.txt

, т.е. Вы могли получить доступ data2.txt внутренний пакет foo с, например

importlib.resources.open_binary('foo', 'data2.txt')

, но это перестанет работать за исключением для [1 117]

>>> importlib.resources.open_binary('foo', 'data/data.txt')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.7/importlib/resources.py", line 87, in open_binary
    resource = _normalize_path(resource)
  File "/usr/lib/python3.7/importlib/resources.py", line 61, in _normalize_path
    raise ValueError('{!r} must be only a file name'.format(path))
ValueError: 'data/data2.txt' must be only a file name

, Это не может быть зафиксировано кроме путем размещения __init__.py в data и затем использования его в качестве пакета:

importlib.resources.open_binary('foo.data', 'data.txt')

причина этого поведения , "это дизайном" ; но дизайн мог бы измениться ...

1
ответ дан 24 November 2019 в 02:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: