データ型が unicodeのデータs = u"[u'38', u'36', u'34', u'32']"
があります。このデータを のような要素の単純なリストとして作成したいのですがs= ['38','36','32']
、
simplejson.loads を使用しようとしましたが、単純な json が ('["s"]') で機能しません。文字列は ("['s']") ではないので、この問題を解決する方法を教えてください。
前もって感謝します
>>> 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']
が利用可能な場合ast
は、使用できますast.literal_eval
。
問題は、その文字列が有効な JSON 構文ではないことです。次の 2 つの理由から、これは有効なPython構文ですが、JSON ではありません。
'38'
二重引用符のみが許可されます"38"
。u"38"
暗黙的に Unicode である裸の文字列のみを使用でき"38"
ます。入力形式を変更するか、代わりに Python 文字列を処理できるものを使用する必要があります。
Python 構文を含む文字列を読み取るを使用することもできますeval
が、誰かが実行するコードを提供できるため、任意の入力を受け入れる場合は非常に危険であることに注意してください。それにもかかわらず、それは機能します:
>>> eval(u"[u'38', u'36', u'34', u'32']")
[u'38', u'36', u'34', u'32']
編集eval
: khachik の答えは、Python データ構造のみを読み取り、任意の Python コードを評価する影響を受けないため、おそらく よりも優れています。
モジュールを使用re
して、文字列を必要な要素に分割します。例えば
re.findall("u\'([^\']+)\'", u"[u'38', u'36', u'34', u'32']")