Форум сайта python.su
Есть с десяток файлов в директории, в которых указанны различные параметры.
Можно ли как то их подгрузить по списку ? Т.е. не указывая import на точный файл, а просто прочитать директорию и если файл соответствует local_*.py , то выполнить его import.
Офлайн
Да можно. Юзай importlib
Про него почитай на pythonworld или где-то еще
Офлайн
import importlib,os def import_mod(name): return importlib.import_module(name) def main_proc(): r_mdls = os.listdir(os.curdir) mdls = [] for c in r_mdls: if c == 'main.py': pass # Чтобы он сам себя не импортировал)) elif c.endswith(".py"): mdls.append(c[:-3]) else: pass for d in mdls: mod = importlib.import_module(d) options = mod.lolz(Тут берешь нужные тебе параметры) # mod.lolz просто часть из моей проги, тут можешь что угодно делать - mod.options или чтото вроде того
Отредактировано python335 (Окт. 28, 2017 12:09:07)
Офлайн
плз +репу
Офлайн
Не совсем так, или не понимаю до конца.
Поясню более задачу:
имеем директорию settings с файлами local_*.py , в которых находится конфигурация.
Сейчас подгрузка делается следующим образом:
from local_db import * from local_keys import * from local_data import * print(KEY_ID)
KEY_ID = 'xxx' KEY_PASS = 'yyy'
import importlib import re rs = os.listdir(os.path.join(BASE_DIR, 'project/settings')) for file_name in rs: match = re.search(r"local_(.*).py$", file_name, re.MULTILINE) if match: # php -> include($file_name) , а как с python ?
Отредактировано VadimK (Окт. 28, 2017 21:05:26)
Офлайн
VadimK
можно сделать
globals().update(importlib.import_module(<name>).__dict__)
Офлайн
Для удобства хочется разбить конфиг на много мелких и подгружать оттуда данные без редактирования основного конфига.
Офлайн
Для того что вы делаете скорее подходит не import а execfile.
for filename in glob("config/local_*.py"): exec(open(filename).read())
Отредактировано doza_and (Окт. 29, 2017 10:38:43)
Офлайн