如何将Python配置文件中的所有变量导入到列表中?
解决方案:自动收集config.py中的所有变量值到列表
这问题我之前也碰到过,几百个变量手动挨个写确实不现实,给你两个可行的方案,适配你用通配符导入的场景:
方案1:直接导入config模块(更可靠)
其实比起用from config import *,直接导入模块然后遍历它的属性会更清晰,而且能避免污染当前命名空间,代码如下:
import config # 筛选出所有用户定义的变量(排除模块内置的下划线开头属性) config_values = [val for name, val in vars(config).items() if not name.startswith('_')]
解释:
vars(config)会返回config模块的属性字典,里面包含了所有模块级别的变量和内置属性- 用
not name.startswith('_')过滤掉模块的内置属性(比如__name__、__file__这类),剩下的就是你在config.py里定义的所有变量 - 最后把这些变量的值提取出来组成列表就行
方案2:适配已用from config import *的场景
如果已经确定要用通配符导入,那可以通过对比导入前后的全局变量来收集新增的变量:
# 先记录导入前的全局变量集合 before_import = set(globals().keys()) from config import * # 计算导入后新增的变量,过滤掉内置属性后提取值 config_values = [globals()[name] for name in set(globals().keys()) - before_import if not name.startswith('_')]
解释:
- 导入前先把当前全局命名空间的变量名存下来,导入后对比得到新增的变量名,这些就是从config.py导入的内容
- 同样过滤掉下划线开头的属性,避免把一些意外导入的内置内容加进来
注意事项:
- 这两个方案都默认你在config.py里定义的变量都是非下划线开头的,如果有下划线开头的自定义变量,需要调整过滤条件
- 确保config.py里没有导入其他模块或者定义函数/类,否则这些内容也会被收集进来(不过你说config.py仅包含变量,所以没问题)
内容的提问来源于stack exchange,提问作者0xInfection
相关产品推荐
相关产品推荐

