我通过POST收到一个像这样的unicode字符串:
u'[<Word: colors>, <Word: red>, <Word: blue>, <Word: yellow>, <Word: green>, <Word: orange>, <Word: purple>, <Word: brown>, <Word: white>, <Word: black>, <Word: grey>]'
我希望它是一个数组或字典,所以我可以使用它。
我该怎么做?
感谢。
答案 0 :(得分:2)
您应该使用模块来解析结构化文本,例如pyparsing。基本上语法应该是这样的:
import pyparsing as pp s = u'[<Word: colors>, <Word: red>, <Word: blue>, <Word: yellow>, <Word: green>, <Word: orange>, <Word: purple>, <Word: brown>, <Word: white>, <Word: black>, <Word: grey>]' term = pp.Literal('<') + pp.Literal('Word') + pp.Literal(':') + pp.Word(pp.alphas) + pp.Literal('>') expr = pp.Literal('[') + term + pp.ZeroOrMore( pp.Literal(',') + term ) + pp.Literal(']') r = expr.parseString(s)
然后从r
检索解析结果。检查项目网站上的示例。您可能需要使用setParseAction()对要提取的项目设置特定的解析器回调:
import pyparsing as pp s = u'[<Word: colors>, <Word: red>, <Word: blue>, <Word: yellow>, <Word: green>, <Word: orange>, <Word: purple>, <Word: brown>, <Word: white>, <Word: black>, <Word: grey>]' colors = [] term = pp.Literal('<') + pp.Literal('Word') + pp.Literal(':') + pp.Word(pp.alphas).setParseAction(lambda s: colors.append(s[0])) + pp.Literal('>') expr = pp.Literal('[') + term + pp.ZeroOrMore( pp.Literal(',') + term ) + pp.Literal(']') r = expr.parseString(s)
现在colors
包含颜色列表,依此类推......
答案 1 :(得分:0)
我认为必须有一种方法来改变你的数据格式(因为我看到你试图输出python对象的列表来形成字段,这不是一个好主意)。
如果没有关于代码的更多信息,我可以提供:
输出到表单字段'colors,red,blue,yellow...'
然后发帖后:list_of_values = input.split(',')
(其中输入收到来自帖子的字符串)
此外,您可以根据所需的输出使用此代码
print map(lambda val: val.strip(' <>'), s.strip('[]').split(','))
print map(lambda val: val.strip(' <>').split(':')[1].strip(), s.strip('[]').split(','))
您也可以序列化或挑选数据。