【问题标题】:Unicode - String - list ManipulationUnicode - 字符串 - 列表操作
【发布时间】:2011-04-13 11:37:56
【问题描述】:

我有一个数据s = u"[u'38', u'36', u'34', u'32']",它的数据类型为 unicode 我想把这些数据变成像s= ['38','36','32']这样的简单元素列表,
我尝试使用 simplejson.loads 但它无法使用简单的 json 与 ('["s"]') 这种类型的字符串而不是 ("['s']") 一起工作,所以请任何朋友指导我解决这个问题

提前致谢

【问题讨论】:

    标签: python string unicode operation


    【解决方案1】:
    >>> 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']
    

    【讨论】:

      【解决方案2】:

      如果ast 可用,您可以使用ast.literal_eval

      【讨论】:

        【解决方案3】:

        问题在于该字符串不是有效的 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 数据结构。

        【讨论】:

          【解决方案4】:

          使用re 模块将您的字符串拆分为所需的元素。例如

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-06-12
            • 2015-07-11
            • 1970-01-01
            • 2017-06-30
            • 2023-04-09
            • 2019-03-25
            • 1970-01-01
            • 2012-09-14
            相关资源
            最近更新 更多