首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串中的表达式计算为字典(Python)

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

Stack Overflow用户
提问于 2014-05-24 02:14:45
回答 1查看 383关注 0票数 0

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

test.txt

代码语言:javascript
复制
{prompt : 'prompt1> ' , command : 'cmd1'}
{prompt : 'prompt2> ' , command : 'cmd2'}
{prompt : 'prompt3> ' , command : 'cmd3'}
{prompt : 'prompt4> ' , command : 'cmd4'}

功能

代码语言:javascript
复制
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)

输出

代码语言:javascript
复制
{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'>

'prompt Fix:这是在引用、、和的报价后的输出,如下所示。他们是dict ,但被交换了。可能是因为eval 根据第一个字符的十六进制值进行排序。。

代码语言:javascript
复制
{'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'> 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-24 02:17:03

因为代码用引号包围了行。

您需要用引号包围promptcommand,而不是整条线。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23840688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档