将字符串内的表达式计算为字典(Python)

时间:2014-05-24 02:14:45

标签: python python-2.7 python-3.x

我正在尝试读取包含Python表达式的字符串,并尝试使用ast.literal_eval来评估它们。 预期结果应为dict。相反,我得到str。 我做错了什么?

的test.txt

{prompt : 'prompt1> ' , command : 'cmd1'}
{prompt : 'prompt2> ' , command : 'cmd2'}
{prompt : 'prompt3> ' , command : 'cmd3'}
{prompt : 'prompt4> ' , command : 'cmd4'}

功能

def send_commands(commands):
    with open(commands, 'r') as file:
        current_line = ast.literal_eval('"' + next(file).rstrip("\n") + '"')
        for next_line in file:
            next_line = ast.literal_eval('"' + next_line.rstrip("\n") + '"')
            print(current_line)
            print(next_line)
            print("type:", type(current_line), type(next_line))
            current_line = next_line

import ast
commands     = "test.txt"
send_commands(commands)

输出

{prompt : 'prompt1> ' , command : 'cmd1'}
{prompt : 'prompt2> ' , command : 'cmd2'}
type: <class 'str'> <class 'str'>
{prompt : 'prompt2> ' , command : 'cmd2'}
{prompt : 'prompt3> ' , command : 'cmd3'}
type: <class 'str'> <class 'str'>
{prompt : 'prompt3> ' , command : 'cmd3'}
{prompt : 'prompt4> ' , command : 'cmd4'}
type: <class 'str'> <class 'str'>

修复:以下是'promptcommand引用后的输出,如下所示。它们是dict但是互换了。可能是因为eval根据第一个字符的十六进制值进行了一些排序。

{'command': 'cmd1', 'prompt': 'prompt1> '}
{'command': 'cmd2', 'prompt': 'prompt2> '}
type: <class 'dict'> <class 'dict'>
{'command': 'cmd2', 'prompt': 'prompt2> '}
{'command': 'cmd3', 'prompt': 'prompt3> '}
type: <class 'dict'> <class 'dict'>
{'command': 'cmd3', 'prompt': 'prompt3> '}
{'command': 'cmd4', 'prompt': 'prompt4> '}
type: <class 'dict'> <class 'dict'> 

1 个答案:

答案 0 :(得分:1)

因为代码用引号括起来。

您需要用引号括起promptcommand,而不是整行。