Unicode转换为Python对象

4

给定一个Unicode对象:

u'[obj1,obj2,ob3]' 

你如何将其转换为普通对象列表?

2
你希望将哪些类型的对象放入列表中? - Ignacio Vazquez-Abrams
我对django.forms.widget类进行了子类化,value_from_datadict方法返回一个对象列表作为Unicode字符串。我想要获取对象列表而不是Unicode字符串。 - mossplix
1
怀疑这个问题基于一个误解,即从终端输出结果... - Daniel Roseman
1
-1:修正问题:“django.forms.widget类..和value_from_datadict方法返回对象列表”这才是真正的问题。请删除这个混乱并重新开始提出真正的问题。 - S.Lott
4个回答

7
import ast
s = u'[obj1,obj2,ob3]'
n = ast.literal_eval(s)
n
[obj1, obj2, ob3]

4

你是不是想要将Unicode字符串转换为字符串列表?顺便提一下,在处理Unicode时需要知道编码方式。这里我使用了UTF-8。

>>> s = u'[obj1,obj2,ob3]'
>>> n = [e.encode('utf-8') for e in s.strip('[]').split(',')]
>>> n
['obj1', 'obj2', 'ob3']

当调用object.__repr__时,是否有一种方法可以将其反转?如何获取对象而不是字符串表示? - mossplix
@mossplix,是的,可以使用 eval 来实现这个目的。>>> obj = repr(True); obj2 = eval(obj); print obj2 - Senthil Kumaran
@mossplix:没有固定的格式。repr()基本上可以返回对象内容的任意表示形式。 - user355252
3
repr()并不要求返回一个符合Python语法的对象表示形式,而且对于大多数对象来说,它实际上并没有。基本上只有原始类型和标准容器才有一个有效的Python语法repr(),对于这些类型,出于安全原因,最好使用ast.literal_eval()而不是eval() - user355252
是的,出于安全原因,我同意使用ast.literal_eval而不是eval。感谢您添加这个内容。我同意您的其他意见。但对于大多数常见目的,repr返回一个可被eval回来的字符串,但也有例外情况。 - Senthil Kumaran

0
你发布的是一个Unicode字符串。 要将其编码为UTF-8,可以使用yourutf8str = yourunicodestr.encode('utf-8')

这将把它转换成一个字节串,但不是一个对象列表。 - Ignacio Vazquez-Abrams
他发布了一个字符串,而不是一个列表 ;) - ThiefMaster

0

当Unicode数据未显示Unicode u...

使用openpyxl导出Excel表格数据时,我的Unicode看起来是不可见的。使用print repr(s)查看它。

>>>print(data)
>>>print(type(data))
["Independent", "Primary/Secondary Combined", "Coed", "Anglican", "Boarding"]
<type 'unicode>
>>>print repr(data)
u'["Independent", "Primary/Secondary Combined", "Coed", "Anglican", "Boarding"]'

解决方法:

>>>import ast    
>>>data = ast.literal_eval(entry)
>>>print(data)
>>>print(type(data))
["Independent", "Primary/Secondary Combined", "Coed", "Anglican", "Boarding"]
<type 'list'>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接