python - 使用 ConfigObj 或 PyYaml 将字典对提取到交互式工作区中

标签 python json parsing configparser pyyaml

我一直想通过从简单的文本文件中读取变量来定义 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/

相关文章:

java - 输入时没有可行的替代方案

Java,提取$符号之间的单词

用于排序元组的 Python 字典,可以做得更好吗?

python - lxml: cssselect(): AttributeError: 'lxml.etree._Element' 对象没有属性 'cssselect'

Python 查询 SQLite 映射值到列名

mysql - Rails 使用 SQL group_by

objective-c - 解析邮件以获取附件

python - OSMNX - 边缘的 "part"被认为是最近的

python - Pandas 按日期过滤 CSV

json - Spring默认消费和生产