2017-05-30 42 views
-1

有沒有什麼辦法將Python包含unicode字符串的列表轉換爲正確的list而不使用eval()ast.literal_eval()如何解析字符串列表沒有eval或ast.literal_eval

例如:

"[u'hello', u'hi']" 

['hello', 'hi'] 
+2

你可以寫你自己吧解析器。如果你有關於列表結構的保證,這很簡單,但沒有令人信服的理由不使用'ast.literal_eval'。 –

+2

你可以添加更多的上下文爲什麼'eval()'和'literal_eval()'不是一個選項? – alecxe

回答

0

難道這是你在找什麼?

a = "[u'hello', u'hi']".translate(None, "[]u'' ") 
a = a.split(',') 
print(a) #['hello', 'hi'] 

好像當你在字符串有'u'這樣你就可以去失敗:

a = "[u'hello', u'hi', u'uyou']".translate(None, "[]' ") 
a = [item[1:] for item in a.split(',')] 
+0

問題可能與此 - OP有這個標記的Python 3.x,這意味着'str.translate'提供的示例將不起作用,如果碰巧有'['或']'(或空間等..)在弦中,你會失去他們...... –

0

這取決於你輸入的格式位:

  • 它只包含「字符串「
  • 如果在字符串前面總是有u
  • 每個字符串在單引號內'
  • ,之前總是沒有空格,但是一個在之後。
  • 沒有空格之前或之後[]

你可以簡單地剝去留下[u'和右'](爲方便起見,我剛剛從第四個元素切它的倒數第二個元素),然後在', u'分裂,就大功告成了:

>>> s = "[u'hello', u'hi']" 
>>> s[3:-2].split("', u'") 
['hello', 'hi']