将unicode字符串转换为数组。 Django的Python的

时间:2014-01-15 10:08:41

标签: python django unicode unicode-string

我通过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>]'

我希望它是一个数组或字典,所以我可以使用它。

我该怎么做?

感谢。

2 个答案:

答案 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(','))

您也可以序列化或挑选数据。