方法是unicode友好的

时间:2015-04-05 15:38:02

标签: python unicode

我在我的代码中使用这一行来计算字符串中的大写字母:

text = "Áno"
count = sum(1 for c in text if c.isupper())

此代码返回0,预期为1.(因为Á是大写的) 如何用unicode字符计算大写字母? 感谢

3 个答案:

答案 0 :(得分:4)

对于python 2,你需要添加u,你的字符串实际上不是unicode:

text = u"Áno"

您也可以将表达式编写为count = sum(c.isupper() for c in text)c.isupper()将返回True或False 1或0。

In [1]: text = "Áno"

In [2]: count = sum(c.isupper() for c in text)

In [3]: count
Out[3]: 0    
In [4]: text = u"Áno"
In [5]: count = sum(c.isupper() for c in text)    
In [6]: count
Out[6]: 1
In [7]: text = "Áno".decode("utf-8")   
In [8]: count = sum(c.isupper() for c in text)    
In [9]: count
Out[9]: 1

答案 1 :(得分:0)

在Python 2中,str.isupper()方法仅适用于 ASCII字符。你几乎肯定有一个Python 2字节串,它将取决于你在那里的确切字节的编码,但它们不会是有效的ASCII字节。

将字符串解码为Unicode值或使用Unicode文字(u'Áno'),以便unicode.isupper()可以根据Unicode标准确定大写字符:

>>> u'Áno'[0].isupper()
True

您可能想要阅读Python和Unicode:

答案 2 :(得分:0)

对于英语单词,所有大写字母都有一个模块。如果你把所有的大写字母都放在一个变量中,下面的代码也适用:

import string
a=string.ascii_uppercase
s='ThiS is A tEst'
count=0
for i in s:
    if i in a:
        count+=1

print(count)