将一个文件中的所有对象添加到另一个文件中的列表中

时间:2019-02-12 22:26:33

标签: python python-import

我有以下python文件constants.py,它存储了一堆常量:

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

我正在尝试导入所有变量,并将它们添加到名为data的列表中。到目前为止,这就是我所拥有的,但是如果我向constants.py添加一个常数,那么我需要记住将其添加到data列表中:

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

这里有更好的方法吗?

4 个答案:

答案 0 :(得分:1)

解决方案是在constants.py文件中创建列表。如下所示:

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

然后,您只需将列表导入到主文件中即可。

答案 1 :(得分:1)

一种方法是使用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'}

由于“笨拙”属性(__spec____builtins__等)的膨胀,包含__all__属性可能很有用。

>>> constants_dict = { k: constants.__dict__[k] for k in constants.__all__ }
>>> constants_dict
{'ONE': 1, 'TWO': 2, 'THREE': 3, 'ANOTHER': 'Test'}

答案 2 :(得分:1)

如果变量以大写字母开头,则可以这样做

ONE = 1
TWO = 2
ANOTHER = "Test"

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

,您不必记住将它们添加到data

答案 3 :(得分:1)

有点类似于其他响应,但是不需要其他模块。

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 *