作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直想通过从简单的文本文件中读取变量来定义 Python 中的变量。因此,我阅读了 ConfigParser、ConfigObj、PyYaml 和 JSON 等内容。目前我对 ConfigObj 和 PyYaml 特别感兴趣。然而我还没有能够干净利落地做我想做的事情。
使用 ConfigObj 和 PyYaml,我可以将外部文本文件中定义的所有内容加载到字典中。我想通过提取所有键值对并将它们作为单独的变量存储到我的交互式工作区中来继续处理该字典。
这是我迄今为止一直使用的 PyYaml 方式:
import yaml
config_file = open('myFile', 'r')
config = yaml.read(config_file)
keys = config.keys()
values = config.values()
for i in range(len(keys)):
string = keys[i] + '=' + str(values[i])
eval(string)
使用eval
有时会令人不悦,因为可能会导致各种恶意事件的发生。因此我想知道 PyYaml 和/或 ConfigObj 是否有内置函数来实现上述功能?
最佳答案
假设我正确理解您的问题,以下内容应该满足您的要求。
注意:我在覆盖 key 之前检查 key 是否存在,否则将其放在稍微不同的名称下。
import yaml
config_file = open('myFile', 'r')
config = yaml.read(config_file)
keys = config.keys()
values = config.values()
for key,val in zip(keys,values):
if key not in locals():
locals()[key] = val
else:
locals()[key+"_yaml"] = val
虽然这有效,但我实际上建议您坚持使用一本包含您的值(value)观的字典。如果局部变量不存在,只引用字典有什么问题吗?
关于python - 使用 ConfigObj 或 PyYaml 将字典对提取到交互式工作区中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17871588/
我是一名优秀的程序员,十分优秀!