python - 将文件中的所有变量导入列表
问题描述
有没有办法将文件中的所有变量导入列表?
简化,这正是我想要实现的目标:
- 我有一个
config.py
包含一些像这样的变量的文件,它只包含变量:# File: config.py NOSCRIPT = True TRANSFER_PB = False TIMEOUT = 7 ...
- 现在我必须将所有这些变量从
config.py
文件导入到process.py
中,这样当我运行时我可以得到类似的东西process.py
# File: process.py from config import * # Stuff to convert all imports into a list x = [NOSCRIPT, TRANSFER_PB, TIMEOUT, ...]
我知道使用通配符并不是一个很好的做法,但由于内部变量数量巨大(大约 500+),我现在别无选择config.py
。我也无法编辑配置文件。我可能遗漏了一些明显的东西,但是如果有人可以帮助我解决这个问题,那就太好了。
解决方案
from config import *
执行以下步骤:
- 它导入
config
(不将其绑定到该名称), - 它检查是否
config.__all__
存在, - 如果存在,请使用这些名称导入对象,
- 否则,导入不以下划线开头的所有内容。
因此,您可以执行以下操作:
import config
if hasattr(config, '__all__'):
x = [getattr(config, name) for name in config.__all__]
else:
x = [getattr(config, name) for name in dir(config) if not name.startswith('_')]
这只是大致等价的,因为 ifconfig.py
定义了__dir__
then this 用于 while 的结果,dir(config)
但from config import *
仍会导入不以下划线开头的每个名称,而不管__dir__
.
注意: )的结果dir(config
是按字母顺序排列的,即dir(config) == sorted(dir(config))
. 这意味着列表的元素不一定按照它们在原始config.py
文件中定义的顺序出现。for name in config.__dict__
由于字典保留了自 Python 3.7 以来的插入顺序,如果这很重要(这也回避了__dir__
差异) ,您可以使用它。
推荐阅读
- bash - 使用 kubectl exec 获取语法错误,因为无法使用 TTY
- python - 如何计算列的唯一值并将每个值附加到字典中?
- python - 获取熊猫数据框中列的先前非 NaN 值以进行计算
- typescript - 使用 ts-loader 时解决类型依赖的问题,但不使用 tsc
- reactjs - 在我的 react-navigation/material-bottom-tabs 上添加通知计数器徽章
- angular - 防止 Angular Material 自动完成溢出页面容器
- android - 如何在 React Native 中制作 Android 手电筒
- python - 将小数字转换为从 0 到 10 的范围
- json - Chrome 83 开发工具“网络预览”选项卡应显示格式化的 JSON 响应时为空白
- python - Python 请求,下载 Overpass Turbo XML