Pythonic从文本文件导入多个词典的方法

时间:2014-02-11 16:38:13

标签: python python-3.x dictionary

所以我有一个文本文件,

question_one = {question:"what is 2+2", answer: "4", fake1: "5"}
question_two = {question:"what is the meaning of life?", answer:"pizza", fake:"42"}

如何导入这些词典,以便我可以像这样使用它们

print(question_one["question"])
print(question_two["question"])

所以出来的将是

what is 2+2
what is the meaning of life?

我希望这样,以便我可以在程序中添加问题到文本文件,然后保存它们,如果我添加更多,如果可能的话,请告诉我!

2 个答案:

答案 0 :(得分:3)

最简单的方法是将您的问题存储到JSON文件中,如@Thom Wiggers建议的那样。

以下是一个例子:

[
    {
        "question": "what is 2+2", 
        "answer": "4", 
        "fake1": "5"
    },
    {
        "question": "what is the meaning of life?", 
        "answer": "pizza", 
        "fake1": "42"
    }
]
import json

with open('questions.json') as f:
    questions = json.load(f)
    for question in questions:
        print(question['question'])

您可以在official documentation中了解有关JSON模块的更多信息。

答案 1 :(得分:1)

如果想要序列化数据,则需要使用picklejsonexec将执行所有 Python代码,并且可能是一个严重的安全问题 pickle更快,并且是针对Python定制的特异性,而json可以读取&几乎任何编程语言的书面作品,并且仍然是人类可读的。人可编辑的。

现在,回答你提出的问题(你可能不想这样做):

您可以使用exec()

  

此函数支持Python代码的动态执行。对象必须   是字符串或代码对象。如果是字符串,则字符串为   解析为一套Python语句然后执行(除非   发生语法错误。)

即。

exec(open('data.txt', 'r').read())

另一种方法是(ab)使用import,假设您的文件名为data.py

import data

data.question_one['question']

这显然不是import的目的......我过去曾'使用过'这样的导入,后悔了(有很多警告,我会留下它作为一个练习让读者思考它们可能是什么。)

警告两者都是eval之类的语句,应谨慎使用,{strong> data.txt中的任何 Python代码都将被执行,可能有潜在危险。 非常确信您信任传递给exec()的内容的来源,如果您只想序列化数据(而不是运行Python代码),则使用就这样)。