从字符串转换为python字典?
如果我喜欢从字符串转换为python字典?,python,serialization,eval,yaml,dictionary,Python,Serialization,Eval,Yaml,Dictionary,如果我喜欢 "{ partner_name = test_partner}" OR " { partner_name : test_partner } 它是一个非常复杂的示例字符串,包含一些特殊字符,如=,[,],{,} 将其转换为python对象的最佳方式是什么?这样我就可以处理它了 我尝试使用eval,但它要求字符串使用“'”,但是我们如何在每个单词的开头和结尾之前添加这个特殊字符\',我尝试了正则表达式re.findal('\w+'),但当我的字符串包含“\u1”或类似字符时失败,因为它
"{ partner_name = test_partner}" OR " { partner_name : test_partner }
它是一个非常复杂的示例字符串,包含一些特殊字符,如=,[,],{,}
将其转换为python对象的最佳方式是什么?这样我就可以处理它了
我尝试使用eval,但它要求字符串使用“'”,但是我们如何在每个单词的开头和结尾之前添加这个特殊字符\',我尝试了正则表达式re.findal('\w+'),但当我的字符串包含“\u1”或类似字符时失败,因为它将以“\u2”分隔字符串
这个问题的目标是我的应用程序需要,用户友好的语言作为输入-我认为Json Dict会很好-但用户懒得在每个字符串的前后加上“'”
然后我想到了yaml,但它也很复杂,如果有人能建议更好的用户友好输入,我将其用作python对象,那么请帮助我解决问题。修复输入将是最好的解决方案 但是您可以跳过一系列的障碍,尝试通过
json
进行输入。这是很脆弱的,因为您的输入不完全是json,分散的输入可能很容易破坏这一点(尽管我仍然倾向于使用eval
)
修正输入是最好的解决方案 但是您可以跳过一系列的障碍,尝试通过
json
进行输入。这是很脆弱的,因为您的输入不完全是json,分散的输入可能很容易破坏这一点(尽管我仍然倾向于使用eval
)
编辑
你可以用
>>重新导入
>>>m=re.match(r“(?P\w+)=(?P\w+),“foo=bar”)
>>>m.groupdict()
{'partner_name':'foo','test_partner':'bar'}
>>>
编辑
你可以用
>>重新导入
>>>m=re.match(r“(?P\w+)=(?P\w+),“foo=bar”)
>>>m.groupdict()
{'partner_name':'foo','test_partner':'bar'}
>>>
如果是一些外部数据,请不要在其上使用eval()!如果您想正确地解析它,请查看一些解析库。使用解析组合符的方法非常好-例如,或者可能是peg解析器:如果是一些外部数据,请不要在其上使用eval()
!如果您想正确地解析它,请查看一些解析库。使用解析组合符的方法非常好——例如,或者可能是peg解析器:如果YAML对于用户来说太复杂,您可能应该考虑给他们一个结构化的输入表单,并从中正确格式化数据。YAML在指定结构方面非常容易编写,当然比大括号语法容易。如果YAML对用户来说太复杂,您可能应该考虑给他们一个结构化的输入表单,并从中正确格式化数据。YAML在指定结构时非常容易编写,当然比大括号语法更容易。您可以替换或删除任何不需要的字符
>>> s
'{ partner_name = test_partner }'
>>> s = ''.join([c for c in s.replace('=', ':') if not c in '\ {}'])
>>> s
'partner_name:test_partner'
然后将字符串一分为二以创建dict
>>> dict([s.split(':')])
{'partner_name': 'test_partner'}
或更新
>>> your_dict.update([s.split(':')])
您可以替换或删除任何不需要的字符
>>> s
'{ partner_name = test_partner }'
>>> s = ''.join([c for c in s.replace('=', ':') if not c in '\ {}'])
>>> s
'partner_name:test_partner'
然后将字符串一分为二以创建dict
>>> dict([s.split(':')])
{'partner_name': 'test_partner'}
或更新
>>> your_dict.update([s.split(':')])
literal\u eval只是eval的一个安全版本,我的问题仍然是问题,用户不想在单词的每个开头和结尾都添加刺痛文字。literal\u eval只是eval的一个安全版本,我的问题仍然是问题,用户不希望在单词的每个开头和结尾都添加sting文本。Pyparsing不再托管在wikispaces.com上。转到wikispaces.com上不再承载Pyparsing。去