Добавить все объекты из одного файла в список в другом файле - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть следующий файл python constants.py, в котором хранится набор констант:

ONE = 1
TWO = 2
ANOTHER = "Test"
....

Я пытаюсь импортировать все переменные и добавить их в список с именем data.Это то, что у меня есть до сих пор, но если я добавлю константу к constants.py, то мне нужно помнить, чтобы добавить ее в список data:

from constants import *
data = [ONE, TWO, ANOTHER, ...]

Есть ли здесь лучший подход?

Ответы [ 4 ]

0 голосов
/ 13 февраля 2019

В некоторой степени похож на другие ответы, но другие модули не требуются.

data = {name:getattr(constants, name) for name in dir(constants) if name[0] != '_'}
print(data) #Prints {'ANOTHER': 'Test', 'ONE': 1, 'TWO': 2}

Обратите внимание, что здесь оператор импорта должен быть import constants, а не from constants import *.

0 голосов
/ 13 февраля 2019

Один из подходов - использовать модуль importlib.Если ваш constants.py модуль содержит:

ONE = 1
TWO = 2
ANOTHER = "Test"

__all__ = [ "ONE", "TWO", "THREE", "ANOTHER" ]

Вы можете импортировать их как модуль:

>>> import importlib
>>> constants = importlib.import_module('constants')
>>> constants.ONE
1
>>> constants.__dict__
{ ... 'ONE': 1, 'TWO': 2, 'THREE': 3, 'ANOTHER': 'Test'}

Из-за переполнения атрибутов "dunder" (__spec__, __builtins__ и т. Д.), Может быть полезно включить атрибут __all__.

>>> constants_dict = { k: constants.__dict__[k] for k in constants.__all__ }
>>> constants_dict
{'ONE': 1, 'TWO': 2, 'THREE': 3, 'ANOTHER': 'Test'}
0 голосов
/ 13 февраля 2019

Если переменные начинаются с заглавной буквы, вы можете сделать это

ONE = 1
TWO = 2
ANOTHER = "Test"

exec('data = [' + ','.join([e for e in dir() if e[0].isupper()]) + ']')

, и вам не нужно добавлять их в data.

0 голосов
/ 13 февраля 2019

Решением будет создание списка в файле constants.py.Это будет выглядеть следующим образом:

ONE = 1
TWO = 2
ANOTHER = "Test"
....
data = [ONE, TWO, ANOTHER, ...]

Затем вы можете просто импортировать список в ваш основной файл.

...