2014-02-25 32 views
2

我做我在语言学项目(语言为马拉雅拉姆语),从每个项目的整数和统一码。提取列表

我的目录是

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

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

预期的输出是

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") 

错误的第一指标。

+0

看看这里蟒'更多信息repr'功能:HTTP:// stackove rflow.com/questions/7784148/understanding-repr-function-in-python – jayelm

回答

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] 
1
>>> 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' 
+0

的表示'res'的解释是输出OP想要的,但它不是你得到什么,当你'print'它。您需要使用'repr'函数来获取对象表示。 – jayelm

+0

是的,我得到它,如果我们使用“打印”它打印的实际unicode的对象。所以为此我们需要使用repr函数。 谢谢:) –

+0

上面的代码将正常工作,只有个位数。 – user3251664