eval包含数组的unicode字符串 - PYTHON

时间:2017-04-11 19:27:31

标签: python json unicode

我有以下字符串:
d = {"ET": 1, "TO": 2, "NY": 3, "SC": 4} marriage_data['Code'] = marriage_data['coded_municipality'].map(d)

我需要将其作为一个字符串数组,但如果我尝试u"['coure', 'explicar', 'nefasta', 'el camió', 'net', 'unir', 'branca', 'educat', tènue, 'hum', 'decisiva', 'avís']"它就会显示eval SyntaxError: invalid syntax并不认为它是要解析的内容。

我该怎么办?

2 个答案:

答案 0 :(得分:1)

该字符串不是有效的Python,正如juanpa.arrivillaga所说。

s = u"['coure', 'explicar', 'nefasta', 'el camió', 'net', 'unir', 'branca', 'educat', tènue, 'hum', 'decisiva', 'avís']"

但您可以使用以下方法将其列入列表:

s = ''.join([char for char in s if not any(char==x for x in "[]'")])
s = s.split(', ')

输出:

['coure', 'explicar', 'nefasta', 'el camió', 'net', 'unir', 'branca', 'educat', 'tènue', 'hum', 'decisiva', 'avís']

说明

第一行删除所有这些字符:

  • [
  • ]
  • '

这样只剩下逗号和单词字符的空格。第二个将字符串分隔为相同列表的元素。

注意:由于我使用' ,'作为分隔符,因此任何元素都不应将其作为子字符串。

修改

根据评论中的建议,我也想出了这个:

''.join([char for char in s if char not in "[]')"]).split(', ')

答案 1 :(得分:1)

json.loads希望您的字符串采用双引号:"..."

您可以用双引号替换单引号以获取有效的json:

s = u"['coure', 'explicar', 'nefasta', 'el camió', 'net', 'unir', 'branca', 'educat', 'tènue', 'hum', 'decisiva', 'avís']"
s = s.replace("'", '"')
l = json.loads(s)
print(l)
# ['coure', 'explicar', 'nefasta', 'el camió', 'net', 'unir', 'branca', 'educat', 'tènue', 'hum', 'decisiva', 'avís']

但如果你的任何一个词包含引用,这将失败......