Найти - Пользователи
Полная версия: from file_name import *
Начало » Python для новичков » from file_name import *
1
VadimK
Есть с десяток файлов в директории, в которых указанны различные параметры.
Можно ли как то их подгрузить по списку ? Т.е. не указывая import на точный файл, а просто прочитать директорию и если файл соответствует local_*.py , то выполнить его import.
python335
Да можно. Юзай importlib
Про него почитай на pythonworld или где-то еще
python335
 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
плз +репу
VadimK
Не совсем так, или не понимаю до конца.

Поясню более задачу:
имеем директорию settings с файлами local_*.py , в которых находится конфигурация.

Сейчас подгрузка делается следующим образом:
 from local_db import *
from local_keys import *
from local_data import *
print(KEY_ID)

Содержимое файлов простое, к примеру local_keys.py:
 KEY_ID = 'xxx'
KEY_PASS = 'yyy'

Как такое реализовать ? Т.е. банальный аналог php: include($file_name); А с importlib по документации идет подключение определенного модуля, а не полного содержимого.

 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 ?

sander
VadimK
можно сделать
 globals().update(importlib.import_module(<name>).__dict__)
но лучше не стоит

что мешает собрать конфиги в 1 большой конфиг, который потом и импортировать?
VadimK
Для удобства хочется разбить конфиг на много мелких и подгружать оттуда данные без редактирования основного конфига.
doza_and
Для того что вы делаете скорее подходит не import а execfile.
 for filename in glob("config/local_*.py"):
      exec(open(filename).read())

Если у вас файлы простые так может и не париться и использовать одно из решений: configparser/json/yaml
Это удобнее если в конфиге много строковых литералов.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB