读取列表列表时,Python避免评估

时间:2019-09-15 16:51:42

标签: python eval

编辑:我添加了一些示例数据。尽管它是有效的val,但我希望能够使用单引号等。而且我也不想更改源格式。

我知道以下内容是个坏主意,但是建议使用什么方式读取存储为列表列表的数据,请避免使用JSON

eval

样本数据:

with open("data.txt") as fh:
    recipes = eval(fh.read())
    for recipe in recipes:
        result, ingredient1, ingredient2 = recipe
        print(result, ingredient1, ingredient2)

1 个答案:

答案 0 :(得分:2)

实际上,这取决于您的输入,但是根据您的问题,我假设有两种情况。

1)该文件包含有效的JSON,因此您可以使用内置的json加载它:

import json
with open("data.txt") as fh:
    recipes = json.load(fh)
    for recipe in recipes:
        result, ingredient1, ingredient2 = recipe
        print(result, ingredient1, ingredient2)

2)该文件包含有效的python列表,但不包含有效的json(单引号,换行符等)。那么ast.literal_eval是您所需要的

import ast
with open("data.txt") as fh:
    recipes = ast.literal_eval(fh.read())
    for recipe in recipes:
        result, ingredient1, ingredient2 = recipe
        print(result, ingredient1, ingredient2)