【问题标题】:unicode to python object conversionunicode 到 python 对象的转换
【发布时间】:2011-02-15 08:39:43
【问题描述】:

给定一个 unicode 对象:

u'[obj1,obj2,ob3]' 

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

【问题讨论】:

  • 您希望列表中包含哪些类型的对象?
  • 我对 django.forms.widget 类进行了子类化......并且 value_from_datadict 方法将对象列表作为 unicode 字符串返回......我希望能够获取对象列表而不是 unicode 字符串。 .
  • 怀疑这个问题是基于一个误解,即在终端输出结果...
  • -1:修复问题:“django.forms.widget 类 .. 和 value_from_datadict 方法返回对象列表”这是真正的问题。请删除这个烂摊子,然后重新开始真正的问题。

标签: python


【解决方案1】:

你是这个意思吗?将 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,是的,为此目的使用 eval。 >>>obj=repr(True);obj2=eval(obj);打印 obj2
  • @mossplix:不,没有。 repr() 没有固定的格式,基本上可以返回对象内容的任意表示。
  • repr() 不需要以有效的 python 语法返回对象的表示,而对于大多数对象,它实际上不需要。基本上只有原始类型和标准容器有 repr(),这是有效的 Python 语法,对于这些类型,出于安全原因,最好使用 ast.literal_eval() 而不是 eval()
  • 是的,出于安全原因,我同意使用ast.literal_eval 而不是eval。感谢您添加此内容。是的也同意你的其他评论。但对于最常见的目的,repr 返回一个字符串,该字符串会被评估,并且有些情况下它不会
【解决方案2】:
import ast
s = u'[obj1,obj2,ob3]'
n = ast.literal_eval(s)
n
[obj1, obj2, ob3]

【讨论】:

    【解决方案3】:

    您发布的是一个 unicode 字符串。 对其进行编码,例如作为 UTF-8 使用 yourutf8str = yourunicodestr.encode('utf-8')

    【讨论】:

    • 这将把它变成一个字节串,而不是一个对象列表。
    • 他发布的是字符串,而不是列表;)
    【解决方案4】:

    当 unicode 数据不显示 unicode 时...

    在使用 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'>
    

    【讨论】:

      猜你喜欢
      • 2018-10-13
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 2021-06-17
      • 1970-01-01
      • 2018-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多