2011-04-13 60 views
3

我有一個數據s = u"[u'38', u'36', u'34', u'32']"它具有數據類型的Unicode 我想使這個數據作爲簡單的像s= ['38','36','32']元素的列表,
我嘗試使用simplejson.loads但它不工作簡單的JSON工作與(「[‘S’]」)這種類型的字符串不是(「[‘S’]」),因此任何好友請指導我得到這個問題的提前的Unicode - 字符串 - 列表操作

回答

9
>>> import ast 
>>> s = u"[u'38', u'36', u'34', u'32']" 
>>> [ item.encode('ascii') for item in ast.literal_eval(s) ] 
['38', '36', '34', '32'] 
+0

非常感謝很好的解決方案 – Shashi 2011-04-13 16:42:07

0

感謝使用re模塊將您的字符串拆分爲需要的元素。例如

re.findall("u\'([^\']+)\'", u"[u'38', u'36', u'34', u'32']") 
1

那麼問題是,該字符串是無效的JSON語法。它是有效的的Python語法,但不是JSON,原因有二:

  1. JSON不允許單引號字符串,'38',只有雙引號,"38"
  2. JSON不允許在字符串u"38"之前的u僅包含隱含Unicode的裸號字符串,"38"

您需要更改輸入格式,或者使用可以處理Python字符串的東西來代替。

您可以使用eval,它讀取包含Python語法的字符串,但請注意,如果您接受任意輸入,這是非常危險的,因爲某人可以提供要執行的代碼。儘管如此,它的工作原理:

>>> eval(u"[u'38', u'36', u'34', u'32']") 
[u'38', u'36', u'34', u'32'] 

編輯:khachik的答案很可能是比eval更好,因爲它不會是容易評估任意Python代碼,只閱讀Python數據結構。

+0

感謝哥們,因爲它解決了我的問題....... – Prateek 2013-02-05 09:56:25