Python 2 中的方法对 Unicode 友好吗?
Method isupper Unicode-friendly in Python 2?
我在我的代码中使用这一行来计算字符串中的大写字母:
text = "Áno"
count = sum(1 for c in text if c.isupper())
此代码 returns 0,但我希望是 1(因为“Á”是大写)
我如何计算带有 Unicode 字符的大写字母?
对于python2你需要加一个u
,你的字符串实际上不是unicode:
text = u"Áno"
您也可以将表达式写成 count = sum(c.isupper() for c in text)
,c.isupper()
将 return True or False so 1 or 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
在Python2中,str.isupper()
方法只对ASCII字符有效。你几乎肯定有一个 Python 2 bytestring,它取决于编码你在那里有什么确切的字节,但它们不会是有效的 ASCII 字节。
将字符串解码为Unicode值或使用Unicode文字(u'Áno'
),这样unicode.isupper()
就可以根据Unicode标准判断大写字符:
>>> u'Áno'[0].isupper()
True
您可能需要阅读 Python 和 Unicode:
对于英文单词,有一个适用于所有大写字母的模块。如果你把你所有的大写字母都放在一个变量中,下面的代码也可以工作:
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)
我在我的代码中使用这一行来计算字符串中的大写字母:
text = "Áno"
count = sum(1 for c in text if c.isupper())
此代码 returns 0,但我希望是 1(因为“Á”是大写) 我如何计算带有 Unicode 字符的大写字母?
对于python2你需要加一个u
,你的字符串实际上不是unicode:
text = u"Áno"
您也可以将表达式写成 count = sum(c.isupper() for c in text)
,c.isupper()
将 return True or False so 1 or 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
在Python2中,str.isupper()
方法只对ASCII字符有效。你几乎肯定有一个 Python 2 bytestring,它取决于编码你在那里有什么确切的字节,但它们不会是有效的 ASCII 字节。
将字符串解码为Unicode值或使用Unicode文字(u'Áno'
),这样unicode.isupper()
就可以根据Unicode标准判断大写字符:
>>> u'Áno'[0].isupper()
True
您可能需要阅读 Python 和 Unicode:
对于英文单词,有一个适用于所有大写字母的模块。如果你把你所有的大写字母都放在一个变量中,下面的代码也可以工作:
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)