【问题标题】:extract the integer and unicodes from each item in the list从列表中的每个项目中提取整数和 unicode
【发布时间】:2014-03-27 04:55:09
【问题描述】:

我正在做我的语言学项目(语言是马拉雅拉姆语)。

我的名单是

x= [u'1\u0d30\u0d3e\u0d2e\u0d28\u0d4d\u200d', u'5\u0d05\u0d35\u0d28\u0d4d\u200d']  

我想从列表中的每个项目中提取整数和 unicode。

预期的输出是

1 \u0d30\u0d3e\u0d2e\u0d28\u0d4d\u200  
5 \u0d05\u0d35\u0d28\u0d4d\u200d

首先我尝试将第一项 x[0] 转换为 ascii

print unicodedata.normalize('NFKD',x[0]).encode('ascii','ignore') 

输出为 1 。

我认为生成此输出是因为列表中的 unicode 是用于马拉雅拉姆语的。

然后我试图找到“\u”的第一个索引,比如

x[0].index("\u")

执行此操作发生错误。

【问题讨论】:

标签: python list unicode


【解决方案1】:

字符序列\uXXXX 表示单个 unicode 字符,而不是字符串中的字符序列。

可以得到预期的输出如下:

for i in x:
    print int(i[0]), repr(i[1:])[2:-1]

(假设整数只有一位)

对于更一般的情况,一种解决方案是使用正则表达式提取整数:

import re
for i in x:
    s = re.match('([0-9]+)', i).group(1)
    print int(s), repr(i[len(s):])[2:-1]

【讨论】:

    【解决方案2】:
    >>> x= [u'1\u0d30\u0d3e\u0d2e\u0d28\u0d4d\u200d', u'5\u0d05\u0d35\u0d28\u0d4d\u200d']  
    >>> res = [ (i[:1], i[1:]) for i in x ]
    >>> res
    [(u'1', u'\u0d30\u0d3e\u0d2e\u0d28\u0d4d\u200d'), (u'5', u'\u0d05\u0d35\u0d28\u0d4d\u200d')]
    
    >>> for i in res:
    ...     print i[0], repr(i[1])
    ... 
    1 u'\u0d30\u0d3e\u0d2e\u0d28\u0d4d\u200d'
    5 u'\u0d05\u0d35\u0d28\u0d4d\u200d'
    

    【讨论】:

    • res 在解释器中的表示是 OP 想要的输出,但这不是你在 print 它时得到的。需要使用repr函数获取对象表示。
    • 是的,我明白了,如果我们使用“打印”,它会打印实际的 unicode 对象。因此,我们需要使用 repr 函数。谢谢:)
    猜你喜欢
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多